java如何實現webservice中wsdlLocation訪問地址的可配置化
阿新 • • 發佈:2018-12-31
背景:專案中呼叫了別的系統的webservice介面,呼叫成功之後發現wsdlLocation的地址是寫死的,不方便修改,所以需要實現地址,包括使用者名稱密碼的可配置。專案的框架是Spring,呼叫webservice使用的是CXF。
實現可配置步驟:
step1:在spring的配置檔案中加入如下配置
上面的配置可以將字串中的"${name}",轉換為name在resource.property中設定的值。<!-- @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>
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中配置的地址和使用者名稱密碼了