Pergunta

Eu gostaria de saber se alguém pode recomendar uma boa biblioteca para gerar java webservices topos como clientes.

Atualmente estou usando um produto que tem incorporado um gerador que só precisa do WSDL e cria as classes necessárias e métodos.

Os meus problemas é ele lança avisos e não cria qualquer método para alguns webservices Eu estou tentando usar.

O problema real é que não explica qual é o problema (para que eu possa ir com o proprietário do webservice e tê-lo modificado), nem deixe-me modificar o ouput então eu provavelmente pode corrigir o problema o meu eu.

No entanto, os proprietários dos webservices (porque isso acontece com vários ws diferentes) dizem que seus ws funciona muito bem e realmente se eu usar soapUI eles realmente trabalho !!!

Eu levei um rápido olhar para as bibliotecas usadas pelo soapUI auto e eu parece promissor.

Eu sei que há Axis que deve fazer o trabalho, mas a minha preocupação é que meu gerador não está usando essa biblioteca já (o que me faz coisa ele irá falhar de novo)

E ultimamente eu não sei se essas duas bibliotecas gerar o stub fonte java ou só tem métodos como

Object [] args = ...;
service.inkvoke("updateCustomer", args );

Quando o que eu gostaria de ter é algo como:

CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );

Assim, qualquer um tem um BOM ws stubs gerador que pode recomendar?

Estou prestes a handcode minha própria, mas vai certamente demorar vários dias para ser aceitável

Foi útil?

Solução

O que você está usando atualmente? Eu uso Axis wsdl2java como uma tarefa Ant. Ele gera os tipos de topos que você deseja. Funciona muito bem, embora a configuração do classpath para executar a construção foi um pouco de dor no Eclipse (havia um punhado de frascos que eu precisava para rastrear e incluir). Na minha formiga buildfile parece que isso:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
              output="${build.dir}"
              testcase="false"
              verbose="true"
              typemappingversion="1.2"
              url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>

Outras dicas

Tenha muito cuidado quando se refere a "Axis": Apache Axis 1 foi abandonado no início 2006, com erros de segurança de rosca levando a impasses e rodadas de CPU (ambos de que nós experimentamos). Você vai lamentamos profundamente a usá-lo. Apache Axis 2 é uma reescrita completa e pode valer a pena um olhar. Mas eu sugiro que você primeiro olhar para Apache CXF e Glassfish Metro .

Update: Aqui estão os relatórios de erros no impasse e 100% rotação de CPU . Aqui está proposta remendo do Cyrille Le Clerc de três anos atrás, nunca cometeu.

Nós eliminado nossos impasses e rodadas por recodificação nosso cliente em Java reta. E, em seguida, o servidor Axis se recusou a falar com a gente, o envio de HTTP de volta 500 erros. Precisávamos afirmam falsamente que fosse um cliente Axis para obter uma resposta adequada. SABÃO interoperabilidade não era uma prioridade para a equipe Eixo 1.

I como o Apache CXF - ele se integra bem com Maven através de um plugin, e ele faz o trabalho. Eu tenho usado ele por um tempo para geração de código stub do cliente, e na última empresa que eu trabalhava estavam usando-o para a parte do servidor do WS do também.

Nos últimos projectos que trabalhei com CXF + Maven + Subversion, nós não incluem as classes geradas no Subversion, apenas uma cópia do arquivo WSDL - as classes stub foram gerados no objetivo "gerar" do Maven .

Apache Axis 2 é o caminho a percorrer ... mas você pode precisar de brincar um pouco para obtê-lo direito. É, talvez, a forma mais comum de fazê-lo. Talvez a ferramenta que você está usando é baseado no Eixo 1?

Eu definitivamente sugiro usar algo baseado em padrões baseados API. Isso significaria JAX-WS API. Apache CXF e Metro são os dois principais implementações JAX-WS, embora JBoss tem uma implementação bem. Axis2 tem uma implementação não certificado, mas nenhum código de suporte gen.

A melhor parte de usar uma API baseada em padrões é se você se deparar com um problema com no produto, você pode tentar outro. Em muitos casos que eu vi, o outro produto, também não funciona, mas vai cuspir uma mensagem de erro diferente ou similar que ajudou a diagnosticar o fato de que ele realmente é um problema em nosso próprio código ou WSDL.

direito Além disso, JAX-WS é construído em Java6. Se você está planejando para rodar em Java6, você pode usá-lo e não ter de lidar com frascos extras e tal.

A última JAX-WS como parte de metro ( http://metro.dev.java.net ) é uma camada bastante agradável abstração. Leva um pouco de ajuste para, mas foi muito mais intuitivo para mim do que algumas das outras opções lá fora.

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