1. 程式人生 > >java如何實現webservice中wsdlLocation訪問地址的可配置化

java如何實現webservice中wsdlLocation訪問地址的可配置化

背景:專案中呼叫了別的系統的webservice介面,呼叫成功之後發現wsdlLocation的地址是寫死的,不方便修改,所以需要實現地址,包括使用者名稱密碼的可配置。專案的框架是Spring,呼叫webservice使用的是CXF。

實現可配置步驟:

step1:在spring的配置檔案中加入如下配置

    <!-- @value 配置資原始檔 -->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
            <value>classpath:resources.properties</value>
            </list>
        </property>
    </bean>

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties"/>
    </bean>
上面的配置可以將字串中的"${name}",轉換為name在resource.property中設定的值。

step2:使用CXF將wsdl解析為java程式碼,並且使用佔位符"${name}"替換service檔案中wsdlLocation和其他使用的地址的地方。如

@WebServiceClient(name = "XXXXXX", 
                  wsdlLocation = "${ADDRESS}",
                  targetNamespace = "urn:sap-com:document:sap:soap:functions:mc-style") 
public class XXXXXXX_Service extends Service {

step3:使用CXF來呼叫webservice,首先需要將resource.property中的值注入到bean中,然後使用CXF來呼叫,如下
 @Value("${UserName}")
 private String UserName;
 @Value("${Password}")
 private String PassWord;
 @Value("${ADDRESS}")
 private String Address;
JaxWsProxyFactoryBean bean=new JaxWsProxyFactoryBean();
bean.setAddress(Address);
bean.setServiceClass(Service_Interface.class);
bean.setUsername(UserName);
bean.setPassword(PassWord);
Service_Interface port=(Service_Interface) bean.create();//得到service。
port.method();//呼叫service的方法
現在程式碼中就可以直接使用resource.property中配置的地址和使用者名稱密碼了