geradora problema Java SABÃO cliente de serviços web com JDK wsimport ferramenta a partir de um WSDL gerado por um aplicativo .NET 2.0

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

Pergunta

Eu estou tentando gerar um cliente para alguns serviços web SOAP usando a ferramenta wsimport JDK 6. O WSDL foi gerado por uma aplicação .NET 2.0. Para aplicações .NET 3.x, ele funciona bem.

Quando eu executo

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

mostra várias mensagens de erro como este:

[ERROR] Uma classe / interface com o mesmo nome "mypackage.SomeClass" já está em uso. Use uma personalização classe para resolver este conflito. linha ?? de http: // myservice wsdl

Quando eu gerar o cliente de serviços da Web usando Axis 1.4 (usando o plug-in Eclipse WebTools).

Alguém sabe o que posso fazer, a fim de usar a ferramenta wsimport? Eu realmente não entendo o que a coisa "class personalização" é.

Foi útil?

Solução

Eu não sei se isso já foi resolvido, mas eu passei algum tempo pesquisando uma solução para esse mesmo problema.

Eu encontrei uma correção aqui - https: // jax- ws.dev.java.net/issues/show_bug.cgi?id=228

A solução é executar wsimport com o -B-XautoNameResolution (sem espaços)

Outras dicas

Para quem lê isso usando Maven, este é como adicioná-lo ao arquivo .pom. Observe os argumentos na seção de configuração. Isso não é muito facilmente encontradas na documentação. Muito obrigado a Isaac Stephens por sua ajuda com isso.

<!-- 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>

A resposta aceita acima resolveria seu problema, mas não iria corrigir a causa subjacente.

A questão está acontecendo por causa de uma operação em seu arquivo wsdl tem o mesmo nome de um xsd: complexType em seu arquivo XSD - como no exemplo abaixo. Todos os tipos e as operações devem ter nomes exclusivos.

<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>

Portanto, verifique suas operações e tipos. Certifique-se de que nenhum deles tem o mesmo nome ou seja, há nomes duplicados.

Você está possivelmente gerando todas as classes a partir do arquivo WSDL no mesmo pacote. Se for esse o caso, tente especificar um pacote de destino diferente para cada arquivo WSDL com a opção -p de wsimport.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top