远程调用服务器端的webservice接口

来源:互联网 发布:ubuntu lnmp环境搭建 编辑:程序博客网 时间:2024/05/07 22:36

搞了几天的研究,终于搞出三种调用方式
第一种:
SoapObject request = new SoapObject(“http://rkxx.ws.sq.lb.com/“, “view”);
request.addProperty(“arg0”, “E5BE68C1153F2076”);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
HttpTransportSE ht=new HttpTransportSE(“http://192.168.1.202:8080/lbkj_esb/webservice/rkxxWS?wsdl“);
try {
ht.call(null,envelope);
} catch (IOException | XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
SoapObject soapObject =( SoapObject) envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
第二种:
package com.lb.sq.ws.security;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class WsClinetAuthHandler implements CallbackHandler {

public void handle(Callback[] callbacks) throws IOException,        UnsupportedCallbackException {    // TODO Auto-generated method stub    for (int i = 0; i < callbacks.length; i++) {         WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];        // System.out.println("identifier: " + pc.getIdentifier());         // 这里必须设置密码,否则会抛出:java.lang.IllegalArgumentException: pwd == null         // but a password is needed         pc.setIdentifier("lbkj");        pc.setPassword("123456");//密码    }}

}
调用:

            Map<String, Object> outProps = new HashMap<String, Object>();            outProps.put(WSHandlerConstants.ACTION,                    WSHandlerConstants.USERNAME_TOKEN);            outProps.put(WSHandlerConstants.USER, "lbkj2");            outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);            // 指定在调用远程ws之前触发的回调函数WsClinetAuthHandler,其实类似于一个拦截器            outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,                    WsClinetAuthHandler.class.getName());            ArrayList list = new ArrayList();            // 添加cxf安全验证拦截器,必须            list.add(new SAAJOutInterceptor());            list.add(new WSS4JOutInterceptor(outProps));            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();            // WebServiceSample服务端接口实现类,这里并不是直接把服务端的类copy过来,具体请参考http://learning.iteye.com/blog/1333223            factory.setServiceClass(RkxxWS.class);            // 设置ws访问地址            factory.setAddress("http://192.168.1.202:8080/lbkj_esb/webservice/rkxxWS?wsdl");            //注入拦截器,用于加密安全验证信息            factory.getOutInterceptors().addAll(list);            RkxxWS service = (RkxxWS) factory.create();            String response = service.view("E5BE68C1153F2076");            System.out.println(response);
0 0
原创粉丝点击