首页 > 其他分享 >JAX-WS开发webservice示例详解

JAX-WS开发webservice示例详解

时间:2023-09-16 17:01:53浏览次数:38  
标签:java webservice JAX 示例 demo micmiu import com jaxws


目录:

  • 概述
  • 实验环境
  • 服务端的实现
  • 客户端的实现

[一]、概述
Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

JAX-WS2.0 (JSR 224 )是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222 ),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173 ),同时它还完全支持schema规范。

JAX-WS与JAX-RPC的区别 可参见:http://java.sun.com/xml/faq.html#JAX-WS-and-JAX-RPC-difference

JAX-WS一些参考资料:

  1. JAX-RPC 2.0 renamed to JAX-WS 2.0
  2. The Java web service Tutorial 
  3. javax.jws.WebService

[二]、实验环境

  • java version “1.6.0_18″、Eclipse3.7
  • maven构建项目:mvn archetype:create -DgroupId=com.micmiu.jaxws.demo -DartifactId=jaxws-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

[三]、服务端的实现

1.最基本的实例

编写接口代码:HelloService.java

1
package  com.micmiu.jaxws.demo; 
 
  
2
 
 
  
3
/** 
 
  
4
* blog http://www.micmiu.com
 
  
5
* 
 
  
6
* @author Michael 
 
  
7
*/
 
  
8
public  interface HelloService { 
 
  
9
String sayHello(String userName); 
 
  
10
}

实现接口并添加webservice注释:HelloServiceImpl.java

1
package  com.micmiu.jaxws.demo.impl; 
 
  
2
 
 
  
3
import  javax.jws.WebMethod; 
 
  
4
import  javax.jws.WebParam; 
 
  
5
import  javax.jws.WebService; 
 
  
6
import  javax.jws.soap.SOAPBinding; 
 
  
7
 
 
  
8
import  com.micmiu.jaxws.demo.HelloService; 
 
  
9
 
 
  
10
/** 
 
  
11
* blog http://www.micmiu.com
 
  
12
* 
 
  
13
* @author Michael 
 
  
14
*/
 
  
15
@WebService() 
 
  
16
//默认SOAPBinding style = Style.DOCUMENT 
 
  
17
@SOAPBinding() 
 
  
18
public  class HelloServiceImpl implements HelloService { 
 
  
19
 
 
  
20
@WebMethod
 
  
21
public String sayHello(@WebParam(name = "userName") String userName) { 
 
  
22
return "hi," + userName +  " welcom to www.micmiu.com"; 
 
  
23
}  
 
  
24
 
 
  
25
}

编写服务端发布代码:ServerStart.java

1
package  com.micmiu.jaxws.demo; 
 
  
2
 
 
  
3
import  javax.xml.ws.Endpoint; 
 
  
4
 
 
  
5
import  com.micmiu.jaxws.demo.impl.HelloServiceImpl; 
 
  
6
 
 
  
7
/** 
 
  
8
* blog http://www.micmiu.com
 
  
9
* 
 
  
10
* @author Michael 
 
  
11
*/
 
  
12
public  class ServerStart { 
 
  
13
 
 
  
14
/** 
 
  
15
* @param args 
 
  
16
*/
 
  
17
public static void  main(String[] args) { 
 
  
18
System.out.println("start publish jax-ws ..."); 
 
  
19
HelloService service = new HelloServiceImpl(); 
 
  
20
Endpoint.publish("http://localhost:8082/HelloService", service); 
 
  
21
System.out.println("publish webservice successful"); 
 
  
22
}  
 
  
23
 
 
  
24
}

运行ServerStart,日志如下:


start publish jax-ws ... 2012-7-12 10:56:41 com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass 信息: Dynamically creating request wrapper Class com.micmiu.jaxws.demo.impl.jaxws.SayHello 2012-7-12 10:56:42 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass 信息: Dynamically creating response wrapper bean Class com.micmiu.jaxws.demo.impl.jaxws.SayHelloResponse publish webservice successful


浏览器打开:http://localhost:8082/HelloService?wsdl

JAX-WS开发webservice示例详解_string

可见服务端已经发布成功。

运用JDK自动的命令: wsgen

ps:如果webservice中有异常声明,必须用wsgen生成常处理的相关类之后,才能发布。

按win+R键,输入cmd回车进入命令行界面,切换到target下创建目录ws,在执行如下命令:



mkdir  ws\bin ws\src ws\wsdl

  • bin    -> 存放生成的class文件
  • src    -> 存放生成的源代码文件
  • wsdl  -> 存放生成的wsdl 文件

再执行如下命令:



wsgen -cp .;classes/ -r ws/wsdl -s ws/src -d ws/bin -wsdl com.micmiu.jaxws.demo.impl.HelloServiceImpl

生成后的目录如下:


D:\workspace_dev\jaxws-demo\target>tree /F ws
卷 work 的文件夹 PATH 列表
卷序列号为 2AF7-9BD9
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\WS
├─bin
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.class
│                              SayHelloResponse.class
│
├─src
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.java
│                              SayHelloResponse.java
│
└─wsdl
        HelloServiceImplService.wsdl
        HelloServiceImplService_schema1.xsd


2.@WebService 指定 endpointInterface 实例

修改接口代码:HelloService.java

1
package  com.micmiu.jaxws.demo; 
 
  
2
 
 
  
3
import  javax.jws.WebMethod; 
 
  
4
import  javax.jws.WebParam; 
 
  
5
import  javax.jws.WebService; 
 
  
6
import  javax.jws.soap.SOAPBinding; 
 
  
7
import  javax.jws.soap.SOAPBinding.Style; 
 
  
8
 
 
  
9
/** 
 
  
10
* blog http://www.micmiu.com
 
  
11
* 
 
  
12
* @author Michael 
 
  
13
*/
 
  
14
@WebService
 
  
15
@SOAPBinding(style = Style.DOCUMENT) 
 
  
16
public  interface HelloService { 
 
  
17
@WebMethod
 
  
18
String sayHello(@WebParam(name = "userName") String userName); 
 
  
19
}

修改接口实现类:HelloServiceImpl.java

1
package  com.micmiu.jaxws.demo.impl; 
 
  
2
 
 
  
3
import  javax.jws.WebService; 
 
  
4
 
 
  
5
import  com.micmiu.jaxws.demo.HelloService; 
 
  
6
 
 
  
7
/** 
 
  
8
* blog http://www.micmiu.com
 
  
9
* 
 
  
10
* @author Michael 
 
  
11
*/
 
  
12
@WebService(endpointInterface = "com.micmiu.jaxws.demo.HelloService") 
 
  
13
public  class HelloServiceImpl implements HelloService { 
 
  
14
public String sayHello(String userName) { 
 
  
15
return "hi," + userName +  " welcom to www.micmiu.com"; 
 
  
16
}  
 
  
17
 
 
  
18
}

运行ServerStart 启动程序,可通过运行日志和浏览器访问wsdl文件进行验证。

[四]、客户端的实现

1. wsimport 生成客户端

按win+R键,输入cmd回车进入dos,切到target目录,然后创建目录:client、client\bin、client\src

在target目录下运行如下命令回车即可生成客户端文件:



wsimport -s client/src -d client/bin -p com.micmiu.jaxws.client http://localhost:8082/HelloService?wsdl

生成源文件目录结构如下:

D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\CLIENT\SRC
└─com
    └─micmiu
        └─jaxws
            └─client
                    HelloServiceImpl.java
                    HelloServiceImplService.java
                    ObjectFactory.java
                    package-info.java
                    SayHello.java
                    SayHelloResponse.java


2.编写客户端测试程序:HelloClient.java

1
package  com.micmiu.jaxws.client; 
 
  
2
 
 
  
3
/** 
 
  
4
* blog http://www.micmiu.com
 
  
5
* @author Michael 
 
  
6
*/
 
  
7
public  class HelloClient { 
 
  
8
 
 
  
9
/** 
 
  
10
* @param args 
 
  
11
*/
 
  
12
public static void  main(String[] args) { 
 
  
13
HelloServiceImplService service = new HelloServiceImplService(); 
 
  
14
HelloServiceImpl hello = service.getHelloServiceImplPort(); 
 
  
15
System.out.println("start webservice client ..."); 
 
  
16
System.out.println("send Michael to server "); 
 
  
17
System.out.println(hello.sayHello("Michael")); 
 
  
18
System.out.println("test client end."); 
 
  
19
}  
 
  
20
 
 
  
21
}

运行测试程序,日志如下:


start webservice client ... send Michael to server hi,Michael welcom to www.micmiu.com test client end.


可见客户端调用成功。


 

========================

使用Myeclipse 8.5开发基于JAX-WS的Web service实例


=======================

https://forums.oracle.com/forums/thread.jspa?threadID=1115210

java.lang.NoClassDefFoundError:  com/sun/xml/ws/spi/ProviderImpl

Hi
Before you run this client program from any IDE or command prompt, set wlfullclient.jar in the classpath. To generate this wlfullclient.jar, please refer the notes from my below post. In Eclipse or JBuilder, you can select your project and set this library in classpath. Or in command prompt set it manually.

http://forums.oracle.com/forums/thread.jspa?messageID=3977012

Note: I already generated this wlfullclient.jar. And I DO SEE your missing class in this jar file. So the above solution should fix your problem.

Thanks
Ravi Jegga


标签:java,webservice,JAX,示例,demo,micmiu,import,com,jaxws
From: https://blog.51cto.com/u_16174476/7494810

相关文章

  • APC进程注入C++示例和检测思考
    直接贴C++代码效果:apc注入到pid为39712的进程procexp可以看到注入的DLL! 好了,我们看看代码如何写:注入部分//inject3.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。#include<iostream>#include<Windows.h>#include<TlHelp32.h>usingnamespacestd;......
  • Ajax 跨域报错 python后端处理
    Ajax跨域报错python后端处理个人项目,前端接口用Ajax写的,python后端部署在另一台电脑上,发出以下报错:查询很久发现是因为前端向后端发送请求时,会预先发送一个OPTION的请求,然后请求通过之后才能够发送这个POST的请求。具体原因还是没有理解,只知道这个大概,有理解的可以评论区......
  • java线程示例
    需要开启线程的方法继承线程类,并在run 中写逻辑publicclassAntextendsThread{Cakecake;publicAnt(Stringname,Cakecake){this.cake=cake;setName(name);}@Overridepublicvoidrun(){while(true){......
  • Spring框架开发WebService的环境搭建
    如题。这里只介绍基本的运行环境搭建。所需IDE或编辑器,自行准备。笔者所有的职业开发者朋友都建议使用IDEA旗舰版(收费)。建议次选VsCode。eclipse、myeclipse这些再次。环境:1、JDK20。javaer都清楚的东西,不赘述。2、maven。很流行的依赖管理工具,在学习开发中顺手拿来编译运行也......
  • koa-登陆接口示例
    constKoa=require('koa');constRouter=require('koa-router');constbodyParser=require('koa-bodyparser');constapp=newKoa();constrouter=newRouter();//处理POST请求的登录接口router.post('/login',async(ctx,ne......
  • mysql 递归查询示例
    WITHRECURSIVEsubordinatesAS(SELECT*FROMsys_deptWHEREdept_id=1--这里以员工ID为1为例UNIONALLSELECTe.*FROMsys_depteINNERJOINsubordinatessONe.dept_id=s.parent_id)SELECT*FROMsubordinates;   ......
  • fastapi设置响应示例
    classTest(BaseModel):name:strdescription:intcreated_at:strupdated_at:strdata:dict@validator("data",pre=True)defparse_data(cls,value):returnjson.loads(value)ifvalueelse{}@validator(......
  • Go之流程控制大全: 细节、示例与最佳实践
    本文深入探讨Go语言中的流程控制语法,包括基本的if-else条件分支、for循环、switch-case多条件分支,以及与特定数据类型相关的流程控制,如for-range循环和type-switch。文章还详细描述了goto、fallthrough等跳转语句的使用方法,通过清晰的代码示例为读者提供了直观的指导。关注微......
  • Lodash _.debounce()用法及代码示例
    Lodash_.debounce()用法及代码示例Lodash是一个JavaScript库,可在underscore.js之上运行。Lodash帮助处理数组,字符串,对象,数字等。lodash中Function的_.debounce()方法用于创建一个反跳函数,该函数将给定的func延迟到自上次调用此反跳函数以来经过的指定等待时间(以毫秒为单位)......
  • 关于 SAP CRM User Status 处理的示例 ABAP 代码
    源代码如下:*&---------------------------------------------------------------------**&ReportZSTATUS_INITIAL_LOAD*&---------------------------------------------------------------------**&*&----------------------------------------------......