Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 26959|Resposta: 0

[Fonte] Chamadas Java para o servidor de serviço web C# não reconhecem o valor do cabeçalho HTTP SOAPAction

[Copiar link]
Postado em 04-03-2021 às 13:19:39 | | | |
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.




Anterior:.NET/C# usa BenchmarkDotNet para testar o desempenho do código
Próximo:Chamada de interface HTTP API do Consul
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com