2012-09-25 5 views
5

Ich entwickle Webservice mit CXF. Ich benutze HTTP-Bindung so nach http://www.w3.org/TR/wsdl#_soap:operationSoapaction ist obligatorisch für diese Art von Transport.Soapaction in WSDL mit CXF

Das Problem ist, dass ich die gleiche Anwendung für Test-und Produktionsserver bereitstellen möchte. Ich würde es gerne tun, ohne die Anwendung neu zu erstellen oder externe WSDL-Dateien zu behalten, was noch eine weitere Sache auf der Wartungsliste hinzufügt.

Ich hatte das gleiche Problem mit Position, aber das war trivial zu lösen. Ich habe publishedEndpointUrl in der Endpunktkonfiguration verwendet, um den richtigen Wert zu setzen. Der Wert wird während der Initialisierung der Anwendung aus der externen Eigenschaftendatei abgerufen, die ich in den Klassenpfad tomcat/common/classes gestellt habe.

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

Ich möchte die gleiche Funktionalität für Soapaction erreichen. Der Wert für dieses Attribut sollte kein relativer URI sein. So zum Test sollte es sein:

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

und für die Produktion

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

eine Ahnung, wie dies zu erreichen?

+0

jemand bereit zu helfen? –

+0

Wie kommt es, dass Sie verschiedene SoapActions für Ihren Test- und Produktionsservice benötigen? Wenn beide Dienste die gleiche WSDL verwenden, können Sie die soapAction einmal definieren und die gleiche Soap-Aktion für test und prod verwenden. –

+0

@YogeshChawla Wenn ich aufgrund der Dokumentation nicht falsch liege, muss das Attribut 'soapAcion' die absolute URL verwenden. Deshalb kann ich nicht eine "dsSOAP/operation1" angeben. Wenn derselbe Wert sowohl für den Test als auch für die Produktion gilt, kann es passieren, dass Clients den Produktionsserver anstelle des Testservers aufrufen. –

Antwort