您的位置:首页 > 编程语言 > Java开发

在EclipseJEE(mars)中使用Axis2开放WebService服务端接口和建立WebService客户端

2016-01-05 17:17 513 查看
准备工具:

1,eclipse-jee-mars-1-win32,

2,tomcat6

3,axis2-1.6.4-bin.zip,axis2-1.6.4-war.zip,axis2-eclipse-codegen-plugin-1.6.4.zip

开发流程:

采用Axis2使用SOAP协议保证WebService安全性的前提下开发WebService,

一般来说,首先总是某个服务提供端开放某个处理类或方法的接口(wsdl文件以及xsd或URL),另外一个服务调用端根据这个接口生成客户端代码,然后根据生成本地代码入口(一般需要服务实际URL)方法发送请求。

准备工作:

0,解压axis2工具包axis2-1.6.4-bin.zip

1,在EclipseJEE中安装好Axis2 的插件“Code generator”

2,在EclipseJEE菜单 /Window/Preferences/Web Services/Axis2 Preferences/Axis2 Runtime 中设置好"Axis2 Runtime location",是axis2-1.6.4-bin.zip解压后的路径。

3,解压axis2-1.6.4-war.zip,把.war文件放置到tomcat的webapp目录,tomcat自动解压

服务端步骤:

1,在EclipseJEE中新建一个"Dynamic Web Project",比如testws,编辑一个java类,用于开放WebService接口,如下代码:

package com.m;

public class SayHi {

public String sayHello(String name){return "Hello, "+name+".";}
public String saySorry(String name){return "Sorry,"+name+".";}
public String getWorld(){return "Hello,World";}

}


2,修改/testws/WebContent/WEB-INF/web.xml为如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>testws9</display-name>
<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>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>


3,解压axis2-1.6.4-war.zip后,将其中conf、lib、modules复制到工程中的WEB-INF目录中,axis2-web复制到WebContent目录下

4,建立services.xml文件(根据工具包中的文件修改axis2-1.6.4\samples\pojo\src\META-INF\services.xml),在services.xml文件中,定义服务名service name和服务需要访问的类ServiceClass,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<service name="SayHi" scope="application">
<description>
POJO Service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">com.m.SayHi</parameter>

</service>


5,把步骤4建立的services.xml文件放在新建的路径中:\WebContent\WEB-INF\services\SayHi\META-INF

6,把testws项目作为web项目在tomcat runtime中运行,

在浏览器中输入"http://localhost:8080/testws/services/SayHi?xsd"查看请求响应数据描述文件,

在浏览器中输入"http://localhost:8080/testws/services/SayHi?wsdl"查看webservice接口描述文件,

能反映出如下xml描述内容 表示WebService已经正常开放。

<?xml version="1.0"?>

-<xs:schema targetNamespace="http://m.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://m.com" xmlns:ns1="http://org.apache.axis2/xsd" elementFormDefault="qualified" attributeFormDefault="qualified">

-<xs:element name="sayHello">

-<xs:complexType>

-<xs:sequence>

<xs:element name="name" type="xs:string" nillable="true" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

-<xs:element name="sayHelloResponse">

-<xs:complexType>

-<xs:sequence>

<xs:element name="return" type="xs:string" nillable="true" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

-<xs:element name="saySorry">

-<xs:complexType>

-<xs:sequence>

<xs:element name="name" type="xs:string" nillable="true" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

-<xs:element name="saySorryResponse">

-<xs:complexType>

-<xs:sequence>

<xs:element name="return" type="xs:string" nillable="true" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

-<xs:element name="getWorld">

-<xs:complexType>

<xs:sequence/>

</xs:complexType>

</xs:element>

-<xs:element name="getWorldResponse">

-<xs:complexType>

-<xs:sequence>

<xs:element name="return" type="xs:string" nillable="true" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>


客户端生成调用代码、测试步骤:

方法一:

1,新建一个Java工程

2,New/ Web Services/Web Service Client/

3,Service Definition选择WSDL路径或URL

产生如下文件:

SayHi.java

SayHiLocator.java

SayHiPortType.java

SayHiPortTypeProxy.java

SayHiSoap11BindingStub.java

4,调用测试代码

package com.m;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;

public class Testws2 {

public static void main(String[] args) {

try {
String req = "I'm merrick!";
SayHiLocator s = new SayHiLocator();
String res = s.getSayHiHttpSoap11Endpoint(new URL("http://localhost:8080/testws/services/SayHi"))
.sayHello(req);
System.out.println("Send: " + req);
System.out.println("Receive: "+res);

} catch (MalformedURLException | ServiceException | RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
测试正确情况:

Send: I'm merrick!

Receive: Hello, I'm merrick!.

方法二:

1,新建一个Java工程

2,菜单选择"Axis2 Code Generator",

3,选择“从WSDL文件产生Java源代码”,

4,输入“WSDL文件路径”(绝对路径),

5,默认,

6,Output画面选择新建的Java工程为代码产生目的地,选择“添加Axis2 库文件”(bin工具包)。

产生如下文件:

ExtensionMapper.java

GetWorld.java

GetWorldResponse.java

SayHello.java

SayHelloResponse.java

SayHi.java

SayHiCallbackHandler.java

SayHiStub.java

SaySorry.java

SaySorryResponse.java

7,测试调用代码

SayHelloResponse r = null;
SaySorryResponse  r2 = null;
GetWorldResponse r3 = null;
SayHiStub sv = new SayHiStub("http://localhost:8080/testws9/services/SayHi");

SayHello sh = new SayHello();
sh.setName("ABC");
r = sv.sayHello(sh);

SaySorry sr = new SaySorry();
sr.setName("DEF");
r2 = sv.saySorry(sr);

GetWorld gw = new GetWorld();
r3 = sv.getWorld(gw);

System.out.println(r.get_return());
System.out.println(r2.get_return());
System.out.println(r3.get_return());


其他客户端调用方法,参考\axis2-1.6.4\samples\userguide\src\userguide\clients
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: