.NET 2.0 응용 프로그램에 의해 생성 된 WSDL에서 JDK 도구를 사용하여 Java Soap Web Services 클라이언트 생성 문제
-
16-09-2019 - |
문제
JDK 6 도구를 사용하여 일부 비누 웹 서비스에 대한 클라이언트를 생성하려고합니다. wsimport
. WSDL은 .NET 2.0 응용 프로그램에 의해 생성되었습니다. .NET 3.X 응용 프로그램의 경우 잘 작동합니다.
내가 달릴 때
wsimport -keep -p mypackage http://myservice?wsdl
다음과 같은 몇 가지 오류 메시지가 표시됩니다.
ERROR] "MyPackage.SomeClass"라는 이름의 클래스/인터페이스가 이미 사용 중입니다. 클래스 사용자 정의를 사용 하여이 충돌을 해결하십시오. 선 ?? 의 http : // myservice? wsdl
Axis 1.4를 사용하여 웹 서비스 클라이언트를 생성 할 때 (Eclipse WebTools 플러그인 사용).
누구든지 사용하기 위해 무엇을 할 수 있는지 아는 사람이 있습니까? wsimport
도구? 나는 "클래스 커스터마이즈"가 무엇인지 정말로 이해하지 못합니다.
해결책
이것이 해결되었는지는 모르겠지만,이 같은 문제에 대한 해결책을 찾는 데 시간을 보냈습니다.
여기서 수정 사항을 찾았습니다. https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228
해결책은 wsimport를 실행하는 것입니다 -B-XautoNameResolution
(공간 없음)
다른 팁
Maven을 사용하여 이것을 읽는 사람이라면 .POM 파일에 추가하는 방법입니다. 구성 섹션의 Args를 참고하십시오. 이것은 문서에서 쉽게 찾을 수 없습니다. Isaac Stephens에게 도움을 준 많은 감사가 있습니다.
<!-- 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>
위의 허용 된 답변은 귀하의 문제를 해결하지만 근본적인 원인을 해결하지는 않습니다.
WSDL 파일의 조작은 아래 예제와 같이 XSD : XSD 파일의 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>
따라서 작업 및 유형을 확인하십시오. 그들 중 어느 것도 동일한 이름, 즉 중복 이름이 없는지 확인하십시오.
동일한 패키지에서 WSDL 파일에서 모든 클래스를 생성 할 수 있습니다. 이 경우 WSimport의 -P 옵션을 사용하여 각 WSDL 파일에 대해 다른 대상 패키지를 지정해보십시오.