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