Cuando yo llame a un servicio web que se encuentra en un equilibrador de carga con jax-ws, devuelve

El servidor envía código de estado HTTP 302: Movido Temporalmente

y luego falla, pero cuando uso SoapUI funciona bien.

Es hay alguna manera de que me puede configurar el servicio para manejar esto correctamente?

Me genera el webservice código utilizando wsimport y hacer la llamada como tal

NotificationWebService service = new NotificationWebService(wsdlLocation, qName);
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
String xmlString = serviceSoap.getRSAPublicKeyXMLString();

Estoy atascado y no he sido capaz de encontrar una solución en cualquier lugar por lo que cualquier ayuda se agradece.

InformationsquelleAutor Clayton | 2012-12-04

3 Comentarios

  1. 14

    Así que después de un montón de investigación finalmente comprendí cuál era el problema. Se fue todo a la redirección de http a https. A partir de los artículos que he encontrado en la web (no recuerdo la url más), es que las bibliotecas que la wsdl2java y wsimport punta de los generadores usan para hacer el webservice de comunicación no permiten que un http a https redirigir siga debido a razones de seguridad.

    Así que a pesar de que yo era la generación de los comprobantes de https wsdl ubicación de la ie. https://wsdl.location.com?wsdl, cuando me encontré con el código para hacer un webservice llamada, estaba tratando de hacer la llamada a http://wsdl.location.com que se tradujo en una solicitud de redirección a https://wsdl.location.com, Pero el http de la biblioteca no lo permite. Así que simplemente reenvía el 302 http de código como una excepción.

    También, hay dos web-servicio de url. Uno de ellos es un servicio de análisis de lo que es normal en la dirección http y, a continuación, hay un servidor de producción, que es a través de https. Así que para evitar esto es todo lo que he hecho es configurar el servicio sobre la marcha para utilizar el punto final he especificado (que ahora es la dirección https) mediante el uso de la BindingProvider clase. Esto también me permite especificar sobre la marcha, dependiendo del ambiente que se está haciendo para llamar, para utilizar la url de prueba o la producción de una ie.

    NotificationWebService service = new NotificationWebService();
    NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
    
    BindingProvider bindingProvider = (BindingProvider) serviceSoap;
    bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://wsdl.location.com");
    
    String xmlString = serviceSoap.getRSAPublicKeyXMLString();

    Así que en resumen, si alguien se encuentra con este problema. Asegúrese de si el punto final que necesita el punto a está en https, que está haciendo un directo de llamada https y no http llamar a que se pida un https redirigir. Esto se puede verificar mediante el examen de la serviceSoap durante la depuración. Se dice que la url que se está realizando la llamada.

    No me fijé en o ir con la opción de configurar wsdl2java y wsimport para generar los stubs y la fuerza de los stubs para el uso de https llamar para que yo pudiera configurar varias url de los puntos finales para diferentes entornos.

    • Qué error se producen viceversa así? Hemos https llamada que llamar a una url http. Tenemos 302 error. Por favor proporcione la sugerencia.
  2. 0

    Sí. No decir lo que se está utilizando para el transporte, pero si es algo como HttpClient necesita configurarlo para que siga redirecciones. Usted puede necesitar a trastear con el código generado automáticamente, o como alternativa, tal vez pruebe con un mayor nivel de abstracción, como la Primavera de los Servicios Web o CXF.

    • Estoy usando el código que se ha generado por la wsimport de comandos, por lo que será con el valor predeterminado de transportes que vienen con él. Gracias, voy a buscar a los otros dos marco de las obras que ustedes han propuesto.
    • Hola, he utilizado el eje para generar el cliente y me sigue apareciendo el mismo error. org.apache.axis2.AxisFault: Transporte de error: 302 Error: Movido Temporalmente. Pero cuando uso SoapUI funciona bien. Así que creo que es un tema más profundo. Así que todavía estoy buscando una manera de permitir a seguir 302 redirecciones.
    • ok, he descubierto cuál es el problema exacto, pero no se cuál es la solución. La dirección url de wsdl que puedo generar los comprobantes de es a través de http, pero cuando uso los comprobantes de pago, se realiza la llamada a través de http y su tratando de redirigir el tráfico https. Al parecer en Java por lo que he leído, que es un no, no. Así que tengo que encontrar una manera, cuando me instancias de la llamada NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap(); debe asegurarse de que lo hace a través de https.
    • Realmente no soy capaz de ayudarle con Axis2 a mí mismo, ya que el uso de cxf, pero de acuerdo a esta página: axis.apache.org/axis2/java/core/docs/http-transport.html, se necesita indicar (a través de la configuración) que desea usar https, tal vez eso ayuda?
  3. 0

    Razón es la cuestión redirección de llamada al servicio web de control obtiene trasladado de HTTP a HTTPS. Editar el archivo WSDL encontrará el código de abajo:

    código original:

    soap:address location="http://www.google.com/Services/Services_xyz.asmx"

    cambiado código:

    soap:address location="https://www.google.com/Services/Services_xyz.asmx"

    Sólo cambiar el atributo de ubicación de HTTP a HTTPS y generar el nuevo código auxiliar mediante el cambio de ubicación del archivo WSDL.

Dejar respuesta

Please enter your comment!
Please enter your name here