2017-10-11 9 views
1

maven-jaxb2-plugin에서 AutoNameResolution을 사용할 수 없습니다. 다음은 내가 잘못 가고있는 곳을 알아낼 수 없습니다 나는 내 치어 파일maven-jaxb2-plugin의 AutoNameResolution

<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> 
     <args> 
      <arg>-XautoNameResolution</arg> 
     </args> 
     <schemaLanguage>WSDL</schemaLanguage> 
     <generatePackage>com.commp.soap.service</generatePackage> 
     <schemas> 
      <schema> 
       <url>https://urltowsdl</url> 
      </schema> 
     </schemas> 
    </configuration> 
</plugin> 

입니다. 오류가 모두 나는 "A class/interface with the same name is already in use. Use a class customization to resolve this conflict." 입니다. 대부분의 기능을 사용하지 않는 타사 wsdl을 사용하고 있기 때문에 donot 사용에 대한 바인딩을 작성하는 대신 간단한 자동 검색을 원합니다.

나는 apache cxf도 시도했다.

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${cxf.version}</version> 
    <executions> 
     <execution> 
      <id>stock-quote-service</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <sourceRoot>${project.basedir}/src/main/generated_java</sourceRoot> 
       <wsdlOptions> 
        <wsdlOption> 
         <wsdl>${project.basedir}/src/main/resources/wsdl/consume.wsdl</wsdl> 
         <wsdlLocation>http://usrltoWsdl</wsdlLocation> 
         <serviceName>Consumer</serviceName> 
         <extraargs> 
          <extraarg>-verbose</extraarg> 
          <extraarg>-p</extraarg> 
          <extraarg>com.projects.webservicex.service</extraarg> 
         </extraargs> 
        </wsdlOption> 
       </wsdlOptions> 
      </configuration> 
      <goals> 
       <goal>wsdl2java</goal> 
      </goals> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>xerces</groupId> 
      <artifactId>xercesImpl</artifactId> 
      <version>2.9.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-xjc-ts</artifactId> 
      <version>2.2.9</version> 
     </dependency> 
    </dependencies> 
</plugin> 

나는 아직도 모두 <extraarg>-autoNameResolution</extraarg>

<defaultOptions> 
    <autoNameResolution>true</autoNameResolution> 
</defaultOptions> 

같은 문제 "Two declarations cause a collision in the ObjectFactory class."

이것을 실행하는 방법은 autoNameResolve 작동받을 수 있나요?

편집 디버그에서 다음과 같은 로그가 표시됩니다.

[DEBUG] Resolving publicId [http://url/webservices/es/common], systemId [null]. 
resolvePublic(http://url/webservices/es/common,null) 
[DEBUG] Parent resolver has resolved publicId [http://url/webservices/es/common], systemId [null] to [null]. 
[DEBUG] Resolving publicId [http://url/webservices/es/constants], systemId [null]. 
resolvePublic(http://url/webservices/es/constants,null) 

답변

0

봅니다 제거합니다 :

<generatePackage>com.commp.soap.service</generatePackage> 

<extraarg>-p</extraarg> 
<extraarg>com.projects.webservicex.service</extraarg> 
+0

이 실제로 일! 왜? 패키지 이름은 생성 된 파일의 패키지 이름과 다릅니다. 그러나 패키지 이름을 제거한 후에는 autoNameResolution도 필요하지 않았습니다. – Manoj

+0

동일한 네임 스페이스에 동일한 클래스가 두 개 정의되어 있지 않으므로 autoNameResolution 옵션이 필요하지 않습니다.이 경우에만 대상 패키지 이름을 변경하려고 시도합니다. 그러나 이것은 이러한 메이븐 플러그인과는 관련이 없지만 "jaxb and xjc"에 직접 연결됩니다. – Macondo