2013-05-13 1 views
0

Eclipse를 Maven (m2eclipse 플러그인) 및 JIBX를 사용하여 XML을 마샬링합니다. 내가 바인딩 파일을 기반으로 공장을 만들려는 그러나이가 자동으로 생성 서비스 스텁에 의해 수행되기 때문에,바인딩 파일을 기반으로 JIBX IBindingFactory를 얻을 수 없습니다.

IBindingFactory bindingFactory = BindingDirectory.getFactory(mappedClass);

:이 같은 공장을 사용하는 경우

그것은 작동합니다. "빈은"아니오를 의미합니다 (파일 이름은 binding.xml입니다) 올바른

Unable to access binding 'binding' 
    Make sure classes generated by the binding compiler are available at runtime 
    java.lang.ClassNotFoundException: .JiBX_bindingFactory 

이름 :

@Test 
public void testBindingFactory() { 
    try 
    { 
     IBindingFactory factory = BindingDirectory.getFactory("binding", ""); 
    } catch (JiBXException e) 
    { 
     e.printStackTrace(); 
     fail(e.getMessage()); 
    } 
} 

를하고 다음과 같은 오류 메시지와 함께 실패 : 그래서 TestNG의에 다음 테스트를 실행 패키지, 또한 올바른지 만, 내가 추측하는 문제가 될 수 있습니까?

공장은 내 프로젝트 폴더에 target/classes/JiBX_bindingFactory.class에서 생성되므로 찾을 수 있어야합니다! (구체적인 최상위 바인딩 클래스를 지정하면 모든 것이 작동 함을 기억하십시오)

어떤 도움을 주실 수 있나요? 내 pom.xml 파일에

빌드 섹션

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.jibx</groupId> 
      <artifactId>jibx-maven-plugin</artifactId> 
      <version>1.2.5</version> 
      <configuration> 
       <schemaBindingDirectory>src/main/config</schemaBindingDirectory> 
       <includeSchemaBindings> 
        <includeSchemaBinding>binding.xml</includeSchemaBinding> 
       </includeSchemaBindings> 
       <verbose>true</verbose> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <!-- Do we require other goals? http://jibx.sourceforge.net/maven-jibx-plugin/ --> 
         <goal>bind</goal> 
         <!-- goal>test-bind</goal--> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

답변

0

이 솔루션을 발견 getFactory(java.lang.String bname, java.lang.String pack, java.lang.ClassLoader loader)의 실현하는 것이 그것 버그!

는 코드의 첫 번째 라인을 고려

public static IBindingFactory [More ...] getFactory(String bname, String pack, 
    ClassLoader loader) throws JiBXException { 

    String cname = (pack == null ? "" : pack + '.') + 
     GENERATE_PREFIX + convertName(bname) + BINDINGFACTORY_SUFFIX; 
    ... 

자동 생성 서비스 스텁이 같은 getFactory 방법이라는 것을 기억하십시오 : "."factory = org.jibx.runtime.BindingDirectory.getFactory("binding", "", ISService_1_0_deStub.class.getClassLoader());

그래서

빈 따옴표로 대체되어있는 Exception : java.lang.ClassNotFoundException: .JiBX_bindingFactory으로 연결됩니다 (클래스 이름 앞의 점에주의하십시오!). 그렇지 않으면 호출이 모호, factory = org.jibx.runtime.BindingDirectory.getFactory("binding", (String)null, ISService_1_0_deStub.class.getClassLoader()); 참고 문자열로 캐스트 :

이 솔루션은이 같은 방법을 호출하는 것입니다!

(!) 참고 :이 방법 getFactory (문자열, 문자열) 당신은 http://jira.codehaus.org에서 JiBX는 버그를 제출 고려해야

+0

user2378199 BindingDirectory의 방법 getFactory (문자열, 문자열, 클래스 로더)를 호출 /secure/BrowseProject.jspa?id=10410 감사! –