背景:項目中調用了別的系統的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中配置的地址和用戶名密碼了
---------------------
轉自:https://blog.csdn.net/u012000209/article/details/55202721