2012-09-25 19 views
5

Estoy desarrollando un servicio web usando CXF. Utilizo el enlace HTTP por lo que de acuerdo con http://www.w3.org/TR/wsdl#_soap:operationsoapaction es obligatorio para este tipo de transporte.soapaction en WSDL usando CXF

El problema es que quiero implementar la misma aplicación para el servidor de pruebas y producción. Me gustaría hacerlo sin reconstruir la aplicación o mantener archivos WSDL externos, lo que agregará una cosa más a la lista de mantenimiento.

Tuve el mismo problema con ubicación, pero ese fue trivial de resolver. Usé publicado EndpointUrl en la configuración del punto final para establecer el valor correcto. El valor se recupera durante la inicialización de la aplicación desde el archivo de propiedades externo, que coloqué en classpath tomcat/common/classes.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
     <value>classpath:ws.properties</value> 
     </list> 
    </property> 
    </bean> 
    <jaxws:endpoint xmlns:tns="http://example.org/ds" id="ds" implementor="org.example.Ds" wsdlLocation="wsdl/ds.wsdl" endpointName="tns:dsSOAP" serviceName="tns:Ds" address="/dsSOAP" publishedEndpointUrl="${publishedEndpointUrl}"> 
    <jaxws:features> 
     <bean class="org.apache.cxf.feature.LoggingFeature" /> 
    </jaxws:features> 
    </jaxws:endpoint> 
</beans> 

Me gustaría lograr la misma funcionalidad para soapaction. El valor para este atributo no debe ser URI relativo. Así que para la prueba que debe ser:

<soap:operation soapAction="https://test.example.org/dsSOAP/operation1" /> 

y para la producción de

<soap:operation soapAction="https://example.org/dsSOAP/operation1" /> 

alguna idea de cómo lograr esto?

+0

¿Alguien dispuesto a ayudar? –

+0

¿Por qué necesita diferentes soapActions para su prueba y servicio de producción? Si ambos servicios usan el mismo WSDL, puede definir soapAction una vez y usar la misma acción de jabón para probar y pinchar. –

+0

@YogeshChawla Si no estoy equivocado debido a la documentación, el atributo 'soapAcion' necesita usar la URL absoluta. Por lo tanto, no puedo poner thererelative one 'dsSOAP/operation1'. Teniendo el mismo valor tanto para la prueba como para la producción, podría terminar con que los clientes comiencen a invocar el servidor de producción en lugar del servidor de prueba. –

Respuesta

Cuestiones relacionadas