一般webServices发布后需要测试一下,是否可行通,在此我把自己所测试的 调用 webService 的简单范例贴出来供新手参考。如有不足,请多指教。
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;
- //此处就为你发布的 webService的 源代码,此处我把它打成 jar 包了.
- //一般在开发中,你可以建一个webService Clietn 来引用 webService的wsdl
- import 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 {
- @Test
- public void testcreateuser() throws Exception {
- UCenterService ucenterService = getUCenterService();
- String result = ucenterService.createuser("renweigang", "123456789", "[email protected]");
- System.out.println(result);
- }
- private UCenterService getUCenterService() {
- return getNotSSLUCenterService();
- }
- private UCenterService getNotSSLUCenterService()
- {
- JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean();
- factory.setServiceClass(UCenterService.class);
- //此处的地址为对方发布的 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模型转换的Handler
- //client.getoutInterceptors().add(new saajOutInterceptor());
- Map<String,Object> properties = new HashMap<String,Object>();
- // ④-1动作
- properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);
- // PW_TEXT 明文 ,PW_DIGEST 摘要
- // PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,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 con.transnal.ucenter.client; import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map; //import net.sxinfo.ucenter.services.UCenterService; //此处就为你发布的 webService的 源代码,此处我把它打成 jar 包了. //一般在开发中,你可以建一个webService Clietn 来引用 webService的wsdl import 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 { @Test public void testcreateuser() throws Exception { UCenterService ucenterService = getUCenterService(); String result = ucenterService.createuser("renweigang","123456789","[email protected]"); System.out.println(result); } private UCenterService getUCenterService() { return getNotSSLUCenterService(); } private UCenterService getNotSSLUCenterService() { JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean(); factory.setServiceClass(UCenterService.class); //此处的地址为对方发布的 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模型转换的Handler //client.getoutInterceptors().add(new saajOutInterceptor()); Map<String,Object> properties = new HashMap<String,Object>(); // ④-1动作 properties.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP); // PW_TEXT 明文,PW_DIGEST 摘要 // PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,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; } }
- <PRE class=java name="code">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 {
- // ①客户端用户模拟数据库
- private static final Map<String,String> pwMockDB = new HashMap<String,String>();
- //一般真正开发中,对方的webService指定用户,此处的 services-//test 为用户名,test 为密码。
- static{
- pwMockDB.put("services-test", "test");
- }
- public void handle(Callback[] callbacks) {
- WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];
- String id = callback.getIdentifer();
- // ②获取用户对应的密码
- callback.setPassword(pwMockDB.get(id));
- }
- }</PRE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。