2009-04-24 2 views
34

JDK 6 도구 wsimport을 사용하여 일부 SOAP 웹 서비스에 대한 클라이언트를 생성하려고합니다. WSDL은 .NET 2.0 응용 프로그램에 의해 생성되었습니다. .NET 3.X 응용 프로그램의 경우 제대로 작동합니다..NET 2.0 응용 프로그램에서 생성 된 WSDL에서 JDK 도구 wsimport로 Java SOAP 웹 서비스 클라이언트를 생성하는 중 문제가 발생했습니다.

내가

wsimport -keep -p mypackage http://myservice?wsdl 

를 실행하면이 같은 몇 가지 오류 메시지 표시 :

[ERROR]가 같은 이름 "mypackage.SomeClass"와 클래스/인터페이스가 이미 사용입니다. 클래스 사용자 정의를 사용하여이 충돌을 해결하십시오. 선 ?? http://myservice?wsdl

Axis 1.4를 사용하여 웹 서비스 클라이언트를 생성 할 때 (Eclipse WebTools 플러그인 사용).

누구나 wsimport 도구를 사용하려면 어떻게해야합니까? 정말 "클래스 사용자 정의"가 무엇인지 이해하지 못합니다.

답변

81

이 문제가 해결되었는지는 잘 모르겠지만 동일한 문제에 대한 해결책을 찾기 위해 시간을 보냈습니다.

내가 여기에 수정을 발견 - https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228

솔루션이 사용 받는다는을 읽는 사람을위한 -B-XautoNameResolution (공백)와 wsimport의

+0

이 코드를'wsimport' 명령 뒤에 추가함으로써 문제가 해결되었습니다. 하지만이 문제의 근본 원인은'XResponse'와 XResponse라는 두 개의 서로 다른 타입이 있기 때문에'XResponse'와 XResponse'라는 두 가지 타입이 있습니다. 이름 충돌은'XResponse'와'XResponseDefinition'처럼 이해할 수 있다면 문제가되지 않습니다. . – fiskra

0

동일한 패키지의 WSDL 파일에서 모든 클래스를 생성 할 가능성이 있습니다. 이 경우 wsimport의 -p 옵션을 사용하여 각 WSDL 파일에 대해 다른 대상 패키지를 지정하십시오.

+0

이것은 실제로 문제가 아니며 다른 -p 옵션을 사용했습니다. – razenha

19

를 실행하는 것입니다, 이것은 .pom 파일에 추가하는 방법입니다 . 구성 섹션의 args에 유의하십시오. 이것은 문서에서 쉽게 발견되지 않습니다. 그의 도움으로 이삭 스티븐스에게 많은 감사를드립니다.

<!-- definition for ERPStandardWork service --> 
<execution> 
    <id>ERPStandardWorkService</id> 
    <goals> 
    <goal>wsimport</goal> 
    </goals> 
    <configuration> 
    <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. --> 
    <args> 
     <arg>-B-XautoNameResolution</arg> 
    </args> 
    <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory> 
    <wsdlFiles> 
     <wsdlFile>ERPStandardWork.wsdl</wsdlFile> 
    </wsdlFiles> 
     <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl 
    </wsdlLocation> 
    <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag 
    </staleFile> 
    </configuration> 
</execution> 
+0

메신저를 사용하고 있습니다. 이게 내 문제를 해결했습니다! 감사! – GabrielBB

0

허용 된 대답은 문제를 해결할 수 있지만 근본적인 원인을 해결하지는 못합니다.

wsdl 파일의 작업이 아래 예제와 같이 xsd : complexType과 동일한 이름을 갖고 있기 때문에 문제가 발생합니다. 모든 유형 및 작업에는 고유 한 이름이 있어야합니다.

<xsd:complexType name="SearchDocuments"> 
     <xsd:sequence> 
     <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/> 
     </xsd:sequence> 
</xsd:complexType> 

<operation name="SearchDocuments"> 
     <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/> 
     <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/> 
</operation> 

작업 및 유형을 확인하십시오. 이름이 중복되지 않도록 이름이 중복되지 않도록하십시오.

관련 문제