搭建本机调试的axis2环境4:本机建立可调式的本机web程序?(1)新建web工程,取名 soa,将上述运行成功的axis2
搭建本机调试的axis2环境
4:本机建立可调式的本机web程序
?(1)新建web工程,取名 soa,将上述运行成功的axis2项目路径webapps\axis2\WEB-INF 下面的 modules,conf,lib,services四个目录,拷贝到soa 的WEB-INF 下面,删除sercices下面的全部内容,并新建文件夹myservice(名字任意),META-INF文件夹,在META-INF下面建立services.xml 文件?如图示
5:修改 web.xml 的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
?xmlns="http://java.sun.com/xml/ns/javaee"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
?http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
?
?<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.jsp</welcome-file>
? </welcome-file-list>
</web-app>
6 建立本机webservice 应用,新建java文件
com.tydic.webservice.HelloWorld,内容如下public class HelloWorld {
?public String sayHello(String name) {
??System.err.println(" com.tydic.webservice.HelloWorld.sayHello()");
??return "Hello bbkf: " + name + ".";
?}?public String saySorry(String name) {
??System.err.println(" com.tydic.webservice.HelloWorld.saySorry()");
??return "Sorry," + name + ".";
?}?public String getWorld() {
??System.err.println(" com.tydic.webservice.HelloWorld.getWorld()");
??return "Hello,World";
?}}7 在 /WEB-INF/services/myservice/META-INF/services.xml 内写入如下<?xml version="1.0" encoding="UTF-8"?>
<service name="HelloWorld" scope="application">
??? <description>
??????? Weather POJO Service
??? </description>
??? <messageReceivers>
??????? <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
???????????????????????? />?
??? </operation>
???
??? <operation name="saySorry">?
??????? <messageReceiver src="/img/2013/04/21/103623194.jpg">8 验证 8.1,通过工具生成调用代码。用eclipse的 axis2生成向导 file--new --other-- axis2 wizards--axis2 code generator ,点击 next ,过程如图示
?点击 next,然后选择生成文件的路径
那么工具会帮我们生成调用客户端代码,将代码挪到eclipse中,样式如下,
?其中 TestHelloWorld是测试类
?8.2
用Java实现调用WebService的客户端程序,参考下面的代码public?class?RPCClient
{
????public?static?void?main(String[]?args)?throws?Exception??
????{
????????//??使用RPC方式调用WebService????????
????????RPCServiceClient?serviceClient?=?new?RPCServiceClient();
????????Options?options?=?serviceClient.getOptions();
????????//??指定调用WebService的URL
????????EndpointReference?targetEPR?=?new?EndpointReference(
????????????????"http://localhost:8080/axis2/services/SimpleService");
????????options.setTo(targetEPR);
????????//??指定getGreeting方法的参数值
????????Object[]?opAddEntryArgs?=?new?Object[]?{"超人"};
????????//??指定getGreeting方法返回值的数据类型的Class对象
????????Class[]?classes?=?new?Class[]?{String.class};
????????//??指定要调用的getGreeting方法及WSDL文件的命名空间
????????QName?opAddEntry?=?new?QName("http://ws.apache.org/axis2",?"getGreeting");
????????//??调用getGreeting方法并输出该方法的返回值
????????System.out.println(serviceClient.invokeBlocking(opAddEntry,?opAddEntryArgs,?classes)[0]);
????????//??下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似
????????classes?=?new?Class[]?{int.class};
????????opAddEntry?=?new?QName("http://ws.apache.org/axis2",?"getPrice");
????????System.out.println(serviceClient.invokeBlocking(opAddEntry,?new?Object[]{},?classes)[0]);
????}?
}
8.3 用 axis2 自带的
wsdl2java简化客户端的编写wsdl2java.bat命令可以在<Axis2安装目录>"bin目录中找到。在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是<Axis2安装目录>。
??? 在Windows控制台输出如下的命令行来生成调用WebService的代码:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/soa/services/HelloWorld?wsdl -p client -s -o stub
??? 其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个SimpleServiceStub.java文件,该文件复杂调用WebService,读者可以在程序中直接使用这个类,代码如下:
?