一般webServices發(fā)布后需要測(cè)試一下,是否可行通,在此我把自己所測(cè)試的 調(diào)用 webService 的簡單范例貼出來供新手參考。如有不足,請(qǐng)多指教。
1:需要借助的包: wss4j-1.5.4.jar cxf-bundle-2.1.3.jar
2:
package con.transnal.ucenter.client;import java.lang.reflect.Proxy;import java.util.HashMap;import java.util.Map;//import net.sxinfo.ucenter.services.UCenterService;//此處就為你發(fā)布的 webService的 源代碼,此處我把它打成 jar 包了.//一般在開發(fā)中,你可以建一個(gè)webService Clietn 來引用 webService的wsdlimport org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;import org.apache.cxf.configuration.jsse.TLSClientParameters;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.apache.cxf.transport.http.HTTPConduit;import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;import org.apache.ws.security.WSConstants;import org.apache.ws.security.handler.WSHandlerConstants;import org.junit.Test;/*** 客戶端程序** @author RenWeigang*/public class UCenterServiceClientTest {@Testpublic void testCreateUser() throws Exception {UCenterService ucenterService = getUCenterService();String result = ucenterService.createUser("renweigang", "123456789", "123456@test.com");System.out.println(result);}private UCenterService getUCenterService() {return getNotSSLUCenterService();}private UCenterService getNotSSLUCenterService(){JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();factory.setServiceClass(UCenterService.class);//此處的地址為對(duì)方發(fā)布的 webService的地址。factory.setAddress("http://uc.cun365.com/ucenter/ucenter/services/UCenterService");System.setProperty("org.apache.cxf.bus.factory", "org.apache.cxf.bus.CXFBusFactory");UCenterService ucenterService = (UCenterService) factory.create();ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(ucenterService);Client client = proxy.getClient();// ③添加流模型和DOM模型轉(zhuǎn)換的Handler//client.getOutInterceptors().add(new SAAJOutInterceptor());Map<String,Object> properties = new HashMap<String,Object>();// ④-1動(dòng)作properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);// PW_TEXT 明文 ,PW_DIGEST 摘要// PasswordDigest是通過非保密渠道發(fā)送用戶名和口令的最佳方法。即使使用XML加密對(duì)<wsse:Password>元素進(jìn)行加密,PasswordText依然可以使用properties.put(WSHandlerConstants.USER, "services-test");// ④-3指定用戶properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);properties.put(WSHandlerConstants.PW_CALLBACK_CLASS, UtPasswordHandler.class.getName());WSS4JOutInterceptor wss4j = new WSS4JOutInterceptor(properties);client.getOutInterceptors().add(wss4j);return ucenterService;}}
- package net.sxinfo.ucenter.client;
- import java.util.HashMap;
- import java.util.Map;
- import javax.security.auth.callback.Callback;
- import javax.security.auth.callback.CallbackHandler;
- import org.apache.ws.security.WSPasswordCallback;
- public class UtPasswordHandler implements CallbackHandler {
- // ①客戶端用戶模擬數(shù)據(jù)庫
- private static final Map<String,String> pwMockDB = new HashMap<String,String>();
- //一般真正開發(fā)中,對(duì)方的webService指定用戶,此處的 services-//test 為用戶名,test 為密碼。
- static{
- pwMockDB.put("services-test", "test");
- }
- public void handle(Callback[] callbacks) {
- WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];
- String id = callback.getIdentifer();
- // ②獲取用戶對(duì)應(yīng)的密碼
- callback.setPassword(pwMockDB.get(id));
- }
- }
package net.sxinfo.ucenter.client;import java.util.HashMap;import java.util.Map;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import org.apache.ws.security.WSPasswordCallback;public class UtPasswordHandler implements CallbackHandler {// ①客戶端用戶模擬數(shù)據(jù)庫private static final Map<String,String> pwMockDB = new HashMap<String,String>();//一般真正開發(fā)中,對(duì)方的webService指定用戶,此處的 services-//test 為用戶名,test 為密碼。static{pwMockDB.put("services-test", "test");}public void handle(Callback[] callbacks) {WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];String id = callback.getIdentifer();// ②獲取用戶對(duì)應(yīng)的密碼callback.setPassword(pwMockDB.get(id));}}
聯(lián)系客服