1、Axis2调用WebService一般有两种方法:
a、使用org.apache.axis2.rpc.client.RPCServiceClient自动生成PayLoad
b、使用org.apache.axis2.client.ServiceClient手动生成PayLoad
package com.ats.ws.client; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.rpc.client.RPCServiceClient; import org.apache.log4j.Logger; import com.ats.db.Person; import com.ats.db.PersonAddResponse; public class WSInvoker { private static Logger logger = Logger.getLogger(WSInvoker.class); private static void invokeWebServiceRPC() { try { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); options.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager")); // 调用Action QName operation = new QName("http://ws.ats.com", "PersonAdd"); // 调用参数类型和参数值 Person p = new Person(); Object req[] = new Object[] { p }; p.setName("HI"); Class[] reqClasses = new Class[] { PersonAddResponse.class }; // 返回结果 Object[] rsp = serviceClient.invokeBlocking(operation, req, reqClasses); PersonAddResponse r = (PersonAddResponse) rsp[0]; logger.debug(r.getOperationReult()); } catch (AxisFault e) { e.printStackTrace(); } } public static void invokeWebServiceDocument() { try { ServiceClient serviceClient = new ServiceClient(); Options opts = new Options(); opts.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager")); opts.setAction("urn:PersonAdd"); serviceClient.setOptions(opts); // 发送请求并并得到返回结果 OMElement res = serviceClient.sendReceive(createPayLoad()); logger.debug(res.getFirstElement().getText()); } catch (AxisFault e) { e.printStackTrace(); } } public static OMElement createPayLoad() { OMFactory fac = OMAbstractFactory.getOMFactory(); // 命名空间 OMNamespace omNsXSD = fac.createOMNamespace("http://ws.ats.com", "xsd"); OMNamespace omNsXS = fac.createOMNamespace("http://www.w3.org/2001/XMLSchema", "xs"); // 指定方法 OMElement method = fac.createOMElement("PersonAdd", omNsXSD); // 指定方法的参数 OMElement p1 = fac.createOMElement("person", omNsXS); OMElement personName = fac.createOMElement("personName", omNsXS); personName.setText("personName"); p1.addChild(personName); OMElement personid=fac.createOMElement("personid", omNsXS); personid.setText(""); p1.addChild(personid); method.addChild(p1); return method; } public static void main(String[] args) { WSInvoker.invokeWebServiceRPC(); WSInvoker.invokeWebServiceDocument(); } }
2、要想看到网络通讯的话,在log4j的配置文件中增加:
<category name="org.apache.commons.httpclient"> <priority value="WARN" /> </category> <category name="httpclient.wire"> <priority value="DEBUG" /> </category>