最近使用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的更多相关文章

  1. WebService学习之旅(七)Axis2发布WebService的几种方式

    前面几篇文章中简单的介绍了如何使用Axis2发布WebService及如何使用Axis2实现Web服务的客户端调用,本节將详细介绍Axis2发布WebService的几种方式. 一.使用aar包方式发 ...

  2. Java借助axis2发布WebService

    Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...

  3. 用AXIS2发布WebService的方法

    Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用. 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apa ...

  4. tomcat 用AXIS2发布WebService 网站的方法

    Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用. Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法. 第一步:首先要下载开发所需要的 ...

  5. Eclipse中Axis2发布WebService

    介绍:Axis是apache下一个开源的webservice开发组件. l  开发工具下载: 1.  eclipse的Java EE版本.下载地址:http://www.eclipse.org/dow ...

  6. Java通过Axis2发布WebService

    参考文档: http://blog.csdn.net/ghsau/article/details/12714965 http://www.iteye.com/topic/1135747 http:// ...

  7. jdk自带发布webservice服务

    1.创建要发布的类 package com.test.webserive; import javax.jws.WebService; //targetNamespace定义命名空间 @WebServi ...

  8. spring与axis2整合发布webservice

    最近在研究整合spring框架和axis2发布webservice服务,由于本人也才学java不久,为了便于以后的查看,在这里记录下发布过程. 所需的工具包,spring.jar和axis2链接地址为 ...

  9. 微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

    0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...

随机推荐

  1. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  2. C#第三节课(1)

    数据类型 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System. ...

  3. 51Nod - 1134 最长递增子序列【动态规划】

    给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个数N ...

  4. 09.正则表达式re-3.常用的匹配规则

    模式 描述 \w 匹配字母.数字及下划线 \W 匹配不是字母.数字及下划线的字符 \s 匹配任意空白字符,等价于[\t\n\r\f] \S 匹配任意非空字符 \d 匹配任意数字,等价于[0-9] \D ...

  5. 7.ES几种常见的搜索方式

    主要知识点  1, query string search (1)  GET /ecommerce/product/_search (2) GET/ecommerce/product/_search? ...

  6. 在eclipse中运行maven命令没有反应,console也不打印信息

    eclipse的maven项目中,在run as  执行maven命令的时候发现毫无反应,console也不打印信息,原因是因为没有传参数,解决办法如下:①打开eclipse的window菜单: ②接 ...

  7. VS2015 建立一个C++的MFC简易窗体程序项目

    一开始建立的窗体工程都是带很多窗口,而且自己拉到窗体的控件,一调试就看不到了,是因为新建立工程项目时勾选了太多其他的了,这里记录分享一下建立一个单纯的窗体程序项目步骤给有需要的人也可以学习. 第一步: ...

  8. 把 Python 脚本打包成可以直接双击运行的 .exe 文件 【转】

    因为最近要用到 Python 脚本,所以自己学习了一下,顺便学习如何把它打包成 .exe 可执行文件,达到双击运行的效果,网上找了资料,保存下来学习用,原文出处:https://baijiahao.b ...

  9. 【习题 4-3 UVA - 220】Othello

    [链接] 我是链接,点我呀:) [题意] [题解] legal被我打成leagal... 然后注意输出坐标的时候,格式是%2d.. 然后就没啥难的了.. [代码] #include <bits/ ...

  10. 【微软2017年预科生计划在线编程笔试第二场 A】Queen Attack

    [题目链接]:http://hihocoder.com/problemset/problem/1497 [题意] 给你n个皇后; 然后问你其中能够互相攻击到的皇后的对数; 皇后的攻击可以穿透; [题解 ...