Por que o servidor de relatórios de webservice que chama C# não reconhece o valor do cabeçalho http SOAPAction e sempre deixa C# alterá-lo, só porque C# só precisa adicionar uma tag, por que o JAVA não pode especificar uma solicitação de ação?
Publicar e chamar Webservice é muito simples, mas ainda existem pequenos problemas, que são resumidos da seguinte forma:
O Java chama o webService do .net com um erro "O servidor falhou em reconhecer o valor do cabeçalho HTTP SOAPAction".
Solução:
Ao chamar um serviço web, nenhum SoapAction é especificado, nenhum RequestNameSpace é especificado, então "O servidor falhou em reconhecer o valor do cabeçalho HTTP SOAPAction" sempre aparece ao solicitar.
Se estiver usando chamadas Axis, chame-as da seguinte forma:
public static void main(String[] args) throws Exception { Não traz? Sufixo WSDL Extremidade da string = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Crie uma chamada de serviço Serviço de serviço = novo serviço(); Criar um objeto de chamada por meio de serviço chamada = (Chamada) serviço.createCall(); Defina a URL onde o serviço está localizado call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline é o método "http://WebXml.com.cn/" no lado da rede, que também presta atenção ao endereço do namespace, e também reporta um erro se você não o trazer call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode também é o nome do parâmetro do método .NET, que é o nome do parâmetro qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Evite chamar o site Service do .net pelo Java com o erro "O servidor falhou em reconhecer o valor do cabeçalho HTTP SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); O tipo de parâmetro retornado call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Também é importante notar que você precisa adicionar o método a ser chamado, caso contrário um erro será reportado Arrays de objetos encapsulam os parâmetros String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Note a seção de comentários.
O login do hiperlink está visível.? WSDL significa Serviço Web Público
A seguinte exceção ocorre quando o wsdl2java.bat que usa CXF gera um cliente para publicar um serviço web .net baseado em um arquivo wsdl
(declaração de elemento indefinido 's:schema') Solução:
Abra o wsdl.xml e use
<s:any minOccurs="2" maxOccurs="2"/>Alternativa <s:element ref="s:schema" /><s:any /> Esse erro de geração wsdl2java deve estar relacionado ao JAXB não suportar referências xml, porque <s:anyanyOccurs="2" maxOccurs="2"/> e <s:element ref="s:schema" /><s:any/> são na verdade equivalentes. <s:element ref="s:schema" /> na verdade significa que você pode usar qualquer tipo de elemento especificado por s:schema aqui, <s:any /> desempenha esse papel, <s:any minOccurs="2" maxOccurs="2"/> é apenas dois <s:any /> Foi escrito em uma frase só.
referênciaO login do hiperlink está visível.
Usando o CXF's wsdl2java.bat gera um super erro de compilação do cliente baseado no arquivo wsdl
Solução:
Ele não compila corretamente porque a especificação jax-ws2.2 entra em conflito com o java6.
No entanto, o programa não pode ser compilado apenas em java5, então é necessário reduzir a versão da especificação jax-ws, que pode ser tratada assim: Executar o comando
WSDL2Java -frontend jaxws21 -client *.xml Dessa forma, o código gerado com jax-ws2.1 pode ser compilado e executado em java6.
Comparei o código cliente gerado pela ferramenta com a comparação de texto e descobri que esta última gerou 3 códigos cliente a mais, então remover os 3 construtores que reportaram erros também pode resolver os problemas acima.
Reimpresso de:O login do hiperlink está visível.
|