使用JDK和axis2发布webservice
最近使用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,且必须是已备案域名.因此前期的服务器端工作需 ...
随机推荐
- 【转载】servlet三大作用域:request,session,application
javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. requestrequest是表示一个请求,只要发 ...
- SharePoint Designer 2013 开启新式验证(Modern Authentication)
首先安装office 2013全家桶 再安装SharePoint Designer 2013 安装完之后,去windows检查更新,并把所有需要更新的都更新了 (更新之后我还通过KMS激活了offic ...
- apicloud 注意事项
页面布局时头部和内容一定要分开,状态栏寖入式要用.可以用api.sendEvent广播出去,api.addlisterten监听. api.openWin打开页面会有黑色闪屏,加bgColor:'#f ...
- 关于 docsify ssr 的研究
关于 docsify ssr 的研究 docsify 虽然不错, 但是不支持 seo .官网虽然提供 seo 的一个简单示例, 但总总问题在 issues 中无人解答. 今天再次尝试, 解决了 ind ...
- 类型转换、分支(day05)
如果表达式里包含多个不同类型的数字就必须 首先把它们转换成同一个类型然后才能 计算 这个转换过程叫做隐式类型转换,完全由 计算机完成 隐式类型转换过程中一定把占地小的类型转换 成占地大的类型 如果不同 ...
- 暑假集训D12总结
刷题 今天终于不考试= = 上午刷了一大圈线段树板子题,于是算是学会了Zkw线段树= = 下午昨天的dalao又来讲几何,然而仍然没有笔记= = 于是刷了一大圈计算几何的水题= =,并没哟啥可以写出题 ...
- ABCDE
ABCDE A-Artificial intelligence 人工智能 B-Block chain 区块链 C-Cloud 云 D-Big Data 大数据 E-Ecology 互联网生态是以互联网 ...
- linux命令用来查看日志关键字
1.查看日志 前 n行: cat 文件名 | head -n 数量 demo: cat test.log | head -n 200 # 查看test.log前200行 2.查看日志 尾 n行: c ...
- HDU oj A + B Problem II
郁闷了就相同的代码在HDUOJ上提交就是AC在NYOJ上提交就是WA字符串处理 #include<stdio.h> #include<string.h> #define N 1 ...
- Android与JS互相调用以及注意
近期项目中常常使用Html5而Android与JS调用常常会用到,这里记录一下,測试系统5.0以上. 这里先贴一下源代码 Activity: package jwzhangjie.com.webvie ...