一:WebService服务端 标注:Axis2实现webservice服务端需要的jar包:
实现方式,步骤如下:
1. web.xml中配置:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
2. 在WEB-INF下新增services/*/META-INF/services.xml (路径格式必须是这样,*表示任意的名称)
例如:/WebServiceDemoD/WebContent/WEB-INF/services/WebServer/META-INF/services.xml
services.xml的格式说明:
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<service name="IHelloService" targetNamespace="http://ws.cms.ivms6.hikvision.comaa">
<description>Web Service例子 </description>
<schema schemaNamespace="http://ws.cms.ivms6.hikvision.combb"></schema>
<parameter name="ServiceClass">com.hikvision.ivms6.cms.ws.newws.impl.Hello</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
<service name="ISayPersonService" targetNamespace="http://ws.cms.ivms6.hikvision.comcc">
<description>Web Service例子 </description>
<schema schemaNamespace="http://ws.cms.ivms6.hikvision.comdd"></schema>
<parameter name="ServiceClass">com.hikvision.ivms6.cms.ws.newws.impl.SayHelloTwo</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
3.编写Hello.class和SayHelloTwo.class
Hello.class:
package com.hikvision.ivms6.cms.ws.newws.impl;
public class Hello {
public String sayHello(String name){
if(!name.equals("")){
return "hello,"+name;
}
return "hello";
}
}
SayHelloTwo.class:
package com.hikvision.ivms6.cms.ws.newws.impl;
public class SayHelloTwo {
public String sayPerson(String personName){
if(!personName.equals("")){
return "hello,"+personName;
}
return "hello";
}
}
二:WebService的客户端:
第一 RPC方式,不生成客户端代码
第二,用wsdl2java工具,生成客户端方式调用
第三,document方式,不生成客户端代码
这里介绍第一种方式:
package com.hikvision.ivms6.cms.ws.newws.impl;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class WebServiceTest {
public static void main(String[] args) throws Exception {
//用Java实现调用WebService的客户端程序
- * 应用rpc的方式调用 这种方式就等于远程调用,
- * 即通过url定位告诉远程服务器,告知方法名称,参数等, 调用远程服务,得到结果。
- * 使用 org.apache.axis2.rpc.client.RPCServiceClient类调用WebService
RPCServiceClient serviceClient;
try {
serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/WebServiceDemoD/services/ISayPersonService");
options.setTo(targetEPR);
Object[] entryArgs = new Object[] {"xxj"}; // 调用方法的参数值
Class[] classes = new Class[] { String.class }; // 调用方法返回值的数据类型的Class对象
QName opName = new QName("http://impl.newws.ws.cms.ivms6.hikvision.com", "sayPerson"); // WSDL文件的命名空间和调用方法名
String xml = (String)serviceClient.invokeBlocking(opName, entryArgs, classes)[0]; // 执行方法获取返回值
System.out.println(xml);
// 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,
// 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
// serviceClient.invokeRobust(opName, entryArgs);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}