2

I가 maven-jaxb2-plugin에 대한 다음과 같은 구성 :받는다는-JAXB2 - 플러그인이 있어야합니다 JAXB 버전 속성 실패

  <!-- https://mvnrepository.com/artifact/org.jvnet.jaxb2.maven2/maven-jaxb2-plugin --> 
      <plugin> 
       <groupId>org.jvnet.jaxb2.maven2</groupId> 
       <artifactId>maven-jaxb2-plugin</artifactId> 
       <version>0.13.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>generate</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <strict>false</strict> 
        <schemaLanguage>WSDL</schemaLanguage> 
        <generatePackage>com.mycompany.project.domain.wsdl</generatePackage> 
        <schemas> 
         <schema> 
          <url>url or file</url> 
         </schema> 
        </schemas> 
       </configuration> 
      </plugin> 

과 함께 실패 :

[ERROR] Error while parsing schema(s).Location [ file:/home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl{2,366}]. 

org.xml.sax의. SAXParseException; systemId : file : /home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl; lineNumber : 2; columnNumber : 366; JAXB 버전 속성이 있어야합니다.

IntelliJ IDEA를 통해 플러그인을 실행하거나 간단한 mvn clean jax2b:generate을 실행해도 차이가 없습니다. 그러나 작업을 here 찾을 수있는 스키마를 성공적으로, 그래서 내가 실제로 wsdl 스키마 의심되는 오전 내가 공개 할 수없는 실제로 형식이 잘못되었지만 메시지를 통해 제공 할 수 있습니다 (나는 그것이 많은 도움이되지 않는다는 것을 알고 있습니다. 있는 그대로 공개하지만 문제가 스키마에 있으면 관련 문제가있는 부분을 게시 할 것입니다.

참고 : SOAP UI는 스키마도 유효성을 검사합니다.

주 2 : 같은 오류가 jax2b-maven-pluginmaven-jax2b-plugin 모두 존재한다.

+1

먼저 [jaxb2-maven-plugin] (http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.3.1/)을 사용하고 uptodate 버전을 사용하는 것이 좋습니다. . 다른 스키마와 비교해 보면 스키마가 범인이어야 함을 의미합니다 ... – khmarbaise

+0

@khmarbaise 의견을 주셔서 감사합니다. 두 플러그인의 최신 버전을 모두 사용해 보았습니다. 나도 잘못된 형식의 스키마로 의심스러워하고, 당신이 그것을 볼 수 있다면 고맙게 생각합니다. 내가 너에게 채팅을 통해 스키마를 보내도 될까? –

+0

@khmarbaise 그리고 [SoapUI] (https://www.soapui.org/)로 웹 서비스를 성공적으로 사용할 수 있습니다. –

답변

5

TL WSDL이 XJC에 맞지 않거나 적합하지 않습니다. strup JAXB 사용자 정의가 필요하거나 xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1"을 루트 요소에 추가해야합니다.

WSDL에 포함 된 스키마에 많은 JAXB 사용자 지정이 포함되어있는 것이 문제입니다. 이것은 나쁜 생각입니다. JAXB 커스터마이징은 벤더에 특화된 것들이다. WSDL (벤더 중립적 인 스펙이라고 생각되는)에 넣는 사람은 누구나 옳은 일을하지 않았다.

이제 JAXB 스키마 컴파일시 XJC가 인라인 JAXB 사용자 정의가있을 때 특정 종소리와 휘파람을 예상합니다. 루트 요소에 jaxb:version 속성이 있습니다. 이 경우 누락되었습니다. schema 요소에는 있지만 루트 wsdl:definitions 요소에는 없습니다. add it 인 경우 컴파일이 성공합니다.

이것은 JAXB 플러그인과는 아무 관련이 없습니다. xjc -wsdl delivery.wsdl을 시도하면 같은 오류가 발생합니다.

이 문제를 억제하는 마법 옵션이있을 수 있지만 알아 내기는 어려울 수 있습니다. 그래서 WSDL 패치를 제안합니다. 코드 생성 전 단계에서 패치를 작성하여 WSDL에 적용하십시오. 개인적으로 WSDL에서 모든 JAXB 사용자 정의를 제거합니다. 왜냐하면 그들이 문자 그대로 아무것도 잊어 버렸기 때문입니다.

+0

고마워요. 정말 wsdl에 대한 제어권이 없으므로, 할 수있는 일은'xmlns : jxb = "http://java.sun.com/xml/ns/jaxb"jxb : version = "2.1"'을 추가하여 발행물. Btw, 플러그인 작성자로서의 당신의 지원으로 왜 maven-jaxb2-plugin을 사용해야하는지 알 수있었습니다. –

관련 문제