最近使用webservice进行远程调用一直很火,自从JDK1.6版本发布后,发布一个webservice项目变得更加简单了
笔者由于工作的需要针对JDK和axis2如何发布webservice做过相关了解,现整理出来供大家参阅,由于水平所限难免有不足之处,请大家指正!
JDK发布webservice的方法
要求环境,jdk1.6以上
服务端代码:
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService(name="pre",targetNamespace="http://www.pre.com")
@SOAPBinding(style = Style.RPC)
public class PreService {
@WebMethod
public void say(){
System.out.println("------hello world--------");
}
}
注释:
name只是确定一个名字,可以自己随便取名,targetNamespace是你的命名空间,也就是调用你这个服务端时要绑定的域名
SOAP格式,style确定使用哪种方式进行交互,RPC是远程调用
下面生成客户端:
cmd命令行下面写下面的代码
wsimport -keep -p com.demo.client http://localhost:8080/Test/services/preService?wsdl
命令参数说明:
-d:生成客户端执行类的class文件的存放目录
-s:
-p:定义生成类的包名
然后把生成的类放入客户端,这样就可以实例化一个服务端类的对象
public class Client {
private static URL CRC_WSDL_LOCATION;
private static QName qName;
private static Service service;
private static Pre simp;
static {
URL url = null;
try {
url = new URL("http://localhost:8080/Test/services/preService?wsdl");
CRC_WSDL_LOCATION = url;
qName = new QName("http://www.pre.com", "PreServiceService");
service = Service.create(CRC_WSDL_LOCATION, qName);
simp = service.getPort(Pre.class);
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL:就是你服务端发布的端口
QName里面的两个参数:第一个---服务器类的命名空间,第二个---使用wsimport命令生成的客户端类PreServiceService
wsimport命令会生成两个客户端类,Pre.java和PreServiceService.java,其中Pre.java是接口
接下来配置文件,有两种方式把服务器端启动起来
第一种:使用main函数发布,不需要tomcat
简单的新建一个类,使用了一个main主函数写一个方法
Endpoint.publish("http://127.0.0.1:8888/preService" , new Pre());
第二种:使用tomcat发布
web.xml里面添加如下代码
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>PreService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PreService</servlet-name>
<url-pattern>/preService</url-pattern>
</servlet-mapping>
这样需要导入三个jar包,如下:
webservices-extra-api.jar
webservices-extra.jar
webservices-rt.jar
这三个jar包百度搜索就可以下载下来,笔者这里就不链接下载地址了
在WEB-INF下面新建一个sun-jaxws.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint
name='PreService'
implementation='com.amarsoft.pre.PreService'
url-pattern='/preService'/>
</endpoints>
第四个属性:binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"
endpoint里面只需三个属性,网上有4个属性的会在生成客户端的时候报SOAP的Binding不是一个标准的
这样有一个缺点就是不能修改发布端口,靠tomcat发布只能使用tamcat的端口
================================================================================================
使用axis2发布webservice,一样比较简单
第一步导入axis2的jar包
服务器端:
package org.test.service;
public class HelloWorld {
public String sayHello(String name){
return "Hello,my name is:"+name;
}
}
在src目录下面新建一个META-INF文件夹,在META-INF文件夹下面新建一个services.xml文件,注意这里不是service.xml
<service name="HelloWorldService" >
<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">org.test.service.HelloWorld</parameter>
</service>
客户端:
package testClient;
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 Client {
public static void main(String[] args) throws AxisFault {
// 使用RPC方式调用
RPCServiceClient sc = new RPCServiceClient();
Options option = sc.getOptions();
// url
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8888/axis2/services/HelloWorldService");
option.setTo(targetEPR);
//指定参数
String[] reqArgs = new String[] {"monk"};
//指定返回类型
Class[] clazz = new Class[]{String.class};
QName qname = new QName("http://service.test.org","sayHello");
System.out.println(sc.invokeBlocking(qname,reqArgs, clazz)[0]);
}
}
web.xml直接复制axis2里面的web.xml即可
固定格式即可发布成功
使用JDK和axis2发布webservice的更多相关文章
-
WebService学习之旅(七)Axis2发布WebService的几种方式
前面几篇文章中简单的介绍了如何使用Axis2发布WebService及如何使用Axis2实现Web服务的客户端调用,本节將详细介绍Axis2发布WebService的几种方式. 一.使用aar包方式发 ...
-
Java借助axis2发布WebService
Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...
-
用AXIS2发布WebService的方法
Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用. 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apa ...
-
tomcat 用AXIS2发布WebService 网站的方法
Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用. Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法. 第一步:首先要下载开发所需要的 ...
-
Eclipse中Axis2发布WebService
介绍:Axis是apache下一个开源的webservice开发组件. l 开发工具下载: 1. eclipse的Java EE版本.下载地址:http://www.eclipse.org/dow ...
-
Java通过Axis2发布WebService
参考文档: http://blog.csdn.net/ghsau/article/details/12714965 http://www.iteye.com/topic/1135747 http:// ...
-
jdk自带发布webservice服务
1.创建要发布的类 package com.test.webserive; import javax.jws.WebService; //targetNamespace定义命名空间 @WebServi ...
-
spring与axis2整合发布webservice
最近在研究整合spring框架和axis2发布webservice服务,由于本人也才学java不久,为了便于以后的查看,在这里记录下发布过程. 所需的工具包,spring.jar和axis2链接地址为 ...
-
微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)
0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...
随机推荐
-
win7(x64)下安装cocos2d并编译安卓项目
好吧,不为啥,就是如题. win7 x64 脑袋内存比较小,说不定明儿就忘了,今天记录一下. 没有什么经验,所有步骤基本都是百度出来的,这里边操作边记录,为了保护原创作者,这里我都附上我查找的链接. ...
-
Iframe刷新父窗口的几种方式
/*Iframe刷新父窗口的几种方式在iframe的子页面中,使用onload刷新父页面的时候,遇到了一些问题. 1.目前来说,测试成功,并且兼容IE6/7和FF的刷新方式. */ <scrip ...
-
AngularJs+bootstrap搭载前台框架——准备工作
1.关于什么是AngularJs以及什么是bootstrap我就不多说了,简单说下,AngularJs是一个比较强大前台MVC框架,bootstrap是Twitter推出的一个用于前端开发的开源工具包 ...
-
oracle关键字使用
v_Describe:=substr(v_Describe,0,length(v_Describe)-1); substr(目标内容,开始位置,截取长度) length(要计算的内容长度) 上述语句可 ...
-
Android导入自定义的jar包时出现 E/AndroidRuntime(486): java.lang.NoClassDefFoundError错误
把自定义的jar包放在Android的工程的libs目录下,运行程序,会出现一下错误: 10-10 08:34:06.479: E/dalvikvm(486): Could not find clas ...
-
Android四大基本组件
Android四大基本组件分别是 Activity:整个应用程序的门面,负责与用户进行交互. Service:承担大部分工作. Content Provider内容提供者:负责对外提供数据,并允许需要 ...
-
model 和 view 实现思考
采用model.view = view 和 view.model=model 进行双向绑定,还有一种方案是采用id号进行绑定,viewmodel的views 和 models 属性存放所有的id 映 ...
-
Uploadify插件使用方法
1.下载所需文件 2.导入所需文件,还需要应用jquery.js文件 3.导入css.js uploadify.css.jquery.uploadify.min.js 4.前端代码 p标签存放uplo ...
-
jquery 事件委托三种事件绑定方式.bind(),.live(),.delegate()
http://www.ituring.com.cn/article/467# http://www.cnblogs.com/lvdabao/archive/2013/08/30/3290603.htm ...
-
Shell脚本中获取select值
最近做一个数据清理,根据行号清理,所以需要查出这个行的最大最小值出来进行删除,如果靠手动每次去查,太麻烦所以就用在sh脚本当中执行SELECT语句,并将结果赋值给一个变量. sh脚本如下 #! /bi ...