作为刚入职的小白分享一下最近学WebService后的成果
服务器的发布:
方法一: 使用JDK发布
创建一个java工程,在创建一个类,代码如下
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService //在要发布的类写上@WebService注解,要导 javax.jws.WebService 包;
public class MyService {
public String sayMoning(String name){
return "哦黑哟"+name;
}
public String sayHello(String name){
return "hello"+name+",i am Service";
}
public static void main(String[] args) {
//publish方法用于发布服务器 address:要发布的地址,注意端口不要被占用
//implementor:要发布的对象
Endpoint.publish("http://localhost:6789/service", new MyService());
System.out.println("service ready ...");
//运行后该类中所有的公有未注解方法被发布到服务器
//在浏览器中输入http://localhost:6789/service/MyService?wsdl可以看到wsdl文档就是发布成功
//用JDK发布服务器很简单,但是我用Docement方式客户端访问的时候会出现返回值为null的情况
}
}
方法二:打包发布
<1>:用windows命令打包成aar
准备工作:
首先可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:
可以下载如下三个zip包:
axis2-eclipse-service-plugin-1.7.1.zip
axis2-eclipse-codegen-plugin-1.7.1.zip
axis2-1.7.1-war.zip
前两个是eclipse的插件包,解压放到eclipse安装目录的dropins即可
重启eclipse可以看到
axis2-1.7.1-war.zip文件用于将WebService发布到Web容器中。解压下后将axis2.war放至tomcat安装目录下的webapps文件夹下,然后启动tomcat后,在webapps目录下会生成axis2文件夹。 访问http://localhost:8080/axis2/能看到以下页面表示axis2运行成功。
第一步:创建一个java工程,创建要发布的类,写上要发布的方法
package com.cn.aar;
public class MyService{
public String sayMoning(String name){
return "哦黑哟"+name;
}
public String sayHello(String name){
return "hello"+name+",i am Service";
}
}
第二步:在工程下新建文件夹services/MyService, MyService下按类MyService.Java包路径建文件路径com/cn/aar 最后将编译后的MyService.class文件拷入com/cn/aar下, 在MyService文件夹下新建文件夹META-INF,META-INF下新建services.xml文件,代码如下
<?xml version="1.0" encoding="UTF-8"?>
<service name="MyService">
<description>Hello Friend Example</description>
<parameter name="ServiceClass">com.cn.aar.MyService</parameter>
<operation name="sayMoning">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="sayHello">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
包结构图片
第三步:在Windows命令行下进到services/MyService目录下运行:jar cvf MyService.aar . (最后有个点号)会在HelloFriend目录下生成HelloFriend.aar包
把MyService.aar拷入tomcat安装目录下的webapps/axis2/WEB-INF/services下,启动Tomcat再进入http://localhost:8080/axis2/进入Services就会看到MyService了。
<2>用axis2打包成arr
第一步:创建一个java工程,创建要发布的类,编辑服务代码
package com.cn.aar;
public class MyService {
public String sayGood(String name){
return "good"+name;
}
public String sayHello(String name){
return "Hello"+name+",i am Service";
}
}
第二步:将代码打包 成aar文件
Eclipse菜单- New - File - Other -Axis2 Service Archiver点击next
class file location:路径选上刚刚所创建类下bin目录
Service name :输入服务名称(自定义)、Class name:类全名、点击load将方法名查出来、选择Search declared methods only,就会看到我们定义的方法,勾选上
设置aar文件名以及存放目录(我是放在桌面)后点Finish:
完成后,可以看到桌面上多了一个Myservice.aar文件
把MyService.aar拷入tomcat安装目录下的webapps/axis2/WEB-INF/services下,启动Tomcat,再进入http://localhost:8080/axis2/进入Services就会看到MyService了。
方法三:不打包发布
创建一个Web工程,建立如下所示的包结构,其中conf、lib、modules、services这四个目录从tomcat安装目录下的\webapps\axis2\WEB-INF下拷贝,(把axis2.war文件拷到tomcat安装目录下的webapps文件夹下才会有axis2目录)(lib目录只拷贝jar包)
在services目录下建HelloWord/META-INF/services.xml
services.xml代码如下
<service name="MyService" >
<description>
Please Type your service description here
</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.cm.service.HelloWord</parameter>
</service>
web.xml代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.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>/services/*</url-pattern>
</servlet-mapping>
</web-app>
最后把工程发布到Tomcat访问的到http://localhost:8080/HellWord/services/MyService?wsdl代表发布成功
下一篇是客户端的方法
总结
问题:用jdk发布的话,用客户端访问会出现返回值为null的情况,其他的发布方法就不会