Axis2实现webservice的服务端和客户端

一: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的客户端程序

  1.    * 应用rpc的方式调用 这种方式就等于远程调用,  
  2.    * 即通过url定位告诉远程服务器,告知方法名称,参数等, 调用远程服务,得到结果。  
  3.    * 使用 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();
}
}
}

原文地址:https://www.cnblogs.com/xxj-bigshow/p/7233066.html