2010-11-22 10 views
7

Actualmente estoy trabajando en un cliente del servicio web utilizando CXF sin los archivos de configuración de Spring.CXF Cómo configurar SoapVersion en el puerto CXF sin Spring

Funciona bastante bien, pero no sé cómo configurar SoapVersion vinculante con Java Api. uso de un archivo de Primavera de este se realiza de la siguiente manera:

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

se conocen ustedes cómo hacer esto en el código de Java (en el puerto, en el SOAPBinding ...)?

Gracias de antemano por su ayuda!

EDITAR ----------------------

Todavía estoy atascado con este problema ... He intentado añadir la anotación SOAPBinding en la interfaz como se sugiere en una de las respuestas a continuación, pero no funcionó ... Todavía estoy buscando una forma de configurar manualmente mi PortType/Binding/Bus para usar Soap 1.2 ...

Cualquier ideas?

EDITAR ----------------------

Problema resuelto! En realidad, respondí mi propia pregunta: ver a continuación ...

¡Gracias!

Respuesta

13

Ok, vuelvo a responder a mi propia pregunta para compartir la solución. Con la ayuda de los chicos de la lista de correo de CXF encontré una solución que me funciona. En realidad, hay 2 formas de resolver el problema. Aquí está la explicación:

El problema vino de la forma en que estaba construyendo mi servicio CXF.

La primera solución es especificar la ubicación WSDL en tiempo de creación de servicio:

// Create the service 
Service service = Service.create(urlToWsdl, serviceQName); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

Esto resolvió el problema, pero yo no quiero tener que enlazan con el WSDL, por lo que aquí es la segunda solución que se deshace de este enlace:

// Create the service 
Service service = Service.create(serviceQName); 
// Add a Port to the service and specify the SOAP 1.2 binding 
service.addPort(serviceQName, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

En mi proyecto, decidimos elegir la segunda solución.

Espero que esto ayude!

+0

¿Cómo puedo hacerlo usando cxf? Estoy creando un servicio como este 'Object implementor = new DiscoveryLookupPortImpl(); Endpoint.publish ("udp: //239.255.255.250: 3702", implementador); 'donde' public class DiscoveryLookupPortImpl implementa DiscoveryLookupPort' – 4ntoine

6

Lo más rápido es probable que atenerse sólo una anotación en la interfaz de:

@BindingType(SOAPBinding.SOAP12HTTP_BINDING) 
+0

Gracias por su respuesta, pero no tengo acceso a la interfaz ... – reef

+0

@reef: ¿De qué obtiene la descripción de la interfaz? –

+0

@Donal Fellows Es el resultado de la ejecución de una herramienta wsdl2java. Es básicamente una de mis dependencias de proyecto. – reef

0

como se sugiere por Donal Fellows contesto a mi propia pregunta;)

En realidad, el problema estaba relacionado con la versión de jabón el servidor puede manejar En el lado del cliente no necesito especificar que deseo usar Soap 1.2, parece que es suficiente tener el PortType en el archivo WSDL configurado para Soap 1.2. Pero en el lado del servidor necesito decir explícitamente qué versión de Soap quiero. En el lado del servidor sigo el uso de la "Primavera-mode" para la configuración CXF por lo tanto me acaba de agregar lo siguiente en el archivo de configuración XML:

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

Eso es todo amigos! ¡Gracias por su tiempo y ayuda!

EDITAR --------------------------------

En realidad esta solución no funciona ahora que nos contacte a un servidor que no administramos ... Todavía estamos atascados con nuestro problema aquí ...

+1

Ok, esta solución funcionó ya que tuve acceso tanto al lado del cliente como del servidor. Ahora que tengo que contactarme con un servidor que no administro, esto no funciona. ¿Saben cómo configurar la versión de SOAP sin la configuración de Spring? – reef

0

Tema viejo. Pensé en publicar una solución que funcionaba para mí. En el archivo cxf-beans.xml, cambié el endpointName="tns:MR_ServerSoap12" de endpointName="tns:MR_ServerSoap". Tenga en cuenta que el nombre del punto final tendrá su propio nombre en su wsdl. Usa ese nombre

1

si está utilizando el cliente cxf, puede usar la siguiente manera. También puede enlazar más de un wsdl.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
factory.setServiceClass(WebServiceClass); 
     BindingConfiguration config = new BindingConfiguration() { 

    @Override 
    public String getBindingId() { 
      // TODO Auto-generated method stub 
      return "http://www.w3.org/2003/05/soap/bindings/HTTP/";//SOAPVersion.SOAP_12.httpBindingId 
    } 
    }; 
    factory.setBindingConfig(config); 
Cuestiones relacionadas