Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 26959|Respuesta: 0

[Fuente] Las llamadas a Java al servidor de servicios web C# no reconocen el valor del encabezado HTTP SOAPAction

[Copiar enlace]
Publicado el 4-03-2021 a las 13:19:39 | | | |
¿Por qué el servidor de informes de servicios web que llama a C# no reconoce el valor de la cabecera http SOAPAction y siempre deja que C# lo cambie, solo porque C# solo necesita añadir una etiqueta, por qué JAVA no puede especificar una solicitud de acción?



Publicar y llamar a Webservice es muy sencillo, pero aún existen problemas menores, que se resumen de la siguiente manera:

Java llama al servicio web de .net con un error de "El servidor no reconoció el valor del encabezado HTTP SOAPAction".

Solución:

Al llamar a un servicio web, no se especifica ninguna SoapAction ni RequestNameSpace, por lo que "El servidor no reconoció el valor del encabezado HTTP SOAPAction" siempre aparece al solicitar.

Si usas llamadas Axis, llámalas de la siguiente manera:


empty estático público main(String[] args) lanza Exception {  
    ¿No lo traes? Sufijo WSDL
    Extremo de la cadena = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Crear una llamada de servicio     
  Servicio de servicio = nuevo Servicio();
  Crear un objeto de llamada mediante servicio
  llamada llamada = (Llamada) servicio.createCall();   
  Establece la URL donde se encuentra el servicio   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline es el método "http://WebXml.com.cn/" en la red, que también presta atención a la dirección del Espacio de Nombres y también reportará un error si no lo traes
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode es también el nombre del parámetro del método .NET, que es el nombre del parámetro de qqCheckOnline
  call.addParameter(nuevo QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Evita que Java llame al servicio web de .net con el error "El servidor no reconoció el valor de la cabecera HTTP SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); El tipo de parámetro devuelto
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); También debe señalarse que debes añadir el método a ser llamado, de lo contrario se reportará un error
  Los arreglos de objetos encapsulan los parámetros     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Fíjate en la sección de comentarios.

El inicio de sesión del hipervínculo es visible.? WSDL significa Servicio Web Público

La siguiente excepción ocurre cuando el wsdl2java.bat que utiliza CXF genera un cliente para publicar un servicio web .net basado en un archivo wsdl


(declaración de elemento indefinida 's:schema')

Solución:

Abre la wsdl.xml y usa


<s:any minOccurs="2" maxOccurs="2"/>Alternativa <s:element ref="s:schema" /><s:any />
Este error de generación en wsdl2java debería estar relacionado con que JAXB no soporta referencias xml, porque <s:anyanyOccurs="2" maxOccurs="2"/> y <s:element ref="s:schema" /><s:any/> son en realidad equivalentes. <s:element ref="s:schema" /> en realidad significa que puedes usar cualquier tipo de elemento especificado por s:schema aquí, <s:any /> cumple este papel, <s:any minOccurs="2" maxOccurs="2"/> es simplemente dos <s:any />

Solo estaba escrito en una frase.

referenciaEl inicio de sesión del hipervínculo es visible.

Usar CXF wsdl2java.bat genera un supererror de compilación del cliente basado en el archivo wsdl

Solución:

No se compila correctamente porque la especificación jax-ws2.2 entra en conflicto con java6.

Sin embargo, el programa no puede compilarse solo en java5, por lo que es necesario reducir la versión de la especificación jax-ws, que puede gestionarse así: Ejecutar el comando

wsdl2java -frontend jaxws21 -client *.xml

De este modo, el código generado con jax-ws2.1 puede compilarse y ejecutarse en java6.

Comparé el código cliente generado por la herramienta con la comparación de texto y descubrí que esta última generaba 3 códigos cliente más, así que eliminar los 3 constructores que reportaban errores también puede resolver los problemas anteriores.

Reimpreso de:El inicio de sesión del hipervínculo es visible.




Anterior:.NET/C# utiliza BenchmarkDotNet para probar el rendimiento del código
Próximo:Llamada a la interfaz HTTP API de Consul
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com