.NET 2.0 응용 프로그램에 의해 생성 된 WSDL에서 JDK 도구를 사용하여 Java Soap Web Services 클라이언트 생성 문제

StackOverflow https://stackoverflow.com/questions/785945

문제

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 파일에 대해 다른 대상 패키지를 지정해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top