2014-10-29 1 views
0

그래서 현재 XSL을 호출 할 때의 xsd 스키마 위치를 주입하기 위해 스프링을 사용하는 프로젝트 일하고, 뭔가 같은 :참조하는 XSD를 XSL에게 전화를 스프링 빈을 사용

<bean id="transformer" class="com.mypackage.Transformer"> 
    <property name="xsl" value="sample.xsl" />     
    <property name="params"> 
     <map> 
      <entry key="schemaLocation" value-ref="schema" /> 
     </map> 
    </property> 
</bean> 

<bean id="schema" class="java.lang.String"> 
    <constructor-arg value="http://www.sample.com/schema/sampleSchema.xsd" /> 
</bean> 

이 작품 좋아, 당신이 스키마 위치로 URL을 사용하지만, 예를 들어, 당신이 클래스 경로에 가져온 스키마를 참조하고 싶다고 말하면, maven 의존성이된다. 나는 'classpath : sampleSchema.xsd'와 같은 것을 사용하는 것이 효과가 없다는 것을 발견했다. 나는 이런 종류의 행동이 상당히 일반적이라고 생각했을 것입니다. classpath에서 스키마를 찾고 해당 경로를 문자열로 반환하는 사용자 정의 클래스를 만드시겠습니까?

답변

0

좋아요. 그래서이 문제를 어떻게 해결했는지 알았습니다.

두 봄 콩 :

<bean id="schema" factory-method="getSchemaLocation" factory-bean="schemaFinder" /> 

<bean id="schemaFinder" class="com.mypackage.SchemaFinder"> 
    <constructor-arg value="NAME_OF_SCHEMA" /> 
</bean> 

그리고 클래스 : 당신이 그것에 대해

public class SchemaFinder 
{ 
private String schemaLocation; 

public SchemaFinder(String schemaName) throws Exception 
{ 
    try 
    { 
     URL absoluteSchemaUrl = getClass().getClassLoader().getResource(schemaName); 
     setSchemaLocation(absoluteSchemaUrl.toString()); 
    } 
    catch (Exception e) 
    { 
     //whatever you want here 
    } 
} 

public void setSchemaLocation(String schemaLocation) 
{ 
    this.schemaLocation = schemaLocation; 
} 

public String getSchemaLocation() 
{ 
    return this.schemaLocation; 
} 
} 

아주 쉽게 생각 ...

관련 문제