最近使用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. Unity与Android通信的中间件

    2.1.1 Fragment和Activity都需要实现的接口——IBaseView/** * Description:Basic interface of all {@link Activity} ...

  2. C++ (带有默认参数的函数参数)缺省函数参数

    缺省参数?在C++中,允许实参的个数与形参的个数不同.在声明函数原型时,为一个或者多个形参指定默认值,以后调用这个函数时,若省略某一个实参,c++则自动的以默认值作为相应参数的值. 实列说明:#inc ...

  3. Java子类对于父类中static方法的继承

    今天看到了Java中子类继承父类的一个相关讨论,在网上综合了各家的观点,写下了一篇简短的总结. 问题如下,在父类中含有staic修饰的静态方法,那么子类在继承父类以后可不可以重写父类中的静态方法呢? ...

  4. 【转载】使用JSONObject生成和解析json

    1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值 (1)json中不区分整数.小数等类型, ...

  5. autoware安装

    1.Autoware的地址为https://github.com/CPFL/Autoware2.Install dependencies for Ubuntu 16.04 kinetic安装教程ins ...

  6. 23.partial update

    主要知识点 1.什么是partial update(部分修改) 2.partial update的语法 3.在es内部partial update的实现过程 4.partial update优点 一. ...

  7. Pycharm中Git、Github的简单使用和配置

    Pycharm中Git.Github的使用 PyCharm本身自带了git,稍微配置一下就可以很好的在图形界面下进行Python项目的版本控制 配置Git 在配置前先新建一个项目,当然也可以打开已有的 ...

  8. zuul 路由网关

    一.阐述 Zuul 包含了对请求的路由和过滤两个主要的功能: 路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础: 滤器功能:负责对请求的处理过程干预,是实现请求校验.服务 ...

  9. UVALive Archive - 6196 - Party Games

    题目: You've been invited to a party. The host wants to divide the guests into 2 teams for party games ...

  10. Java 集合之Collection 接口和遍历方法

    这几篇是我按网上的教程来实习的. URL: http://www.cnblogs.com/jbelial/archive/2013/03/27/2981395.html 打代码的感觉挻好的.. 注意在 ...