- 浏览: 2018032 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
JAX-WS是JAX-RPC的后继新技术,日渐流行。于是我也来试试。看了IBM上的一些文章,对比JAX-WS和JAX-RPC的,JAX-WS带来不少好处。通过使用 Java™ API for XML Web Services (JAX-WS) 技术设计和开发 Web 服务,可以带来很多好处,能简化 Web 服务的开发和部署,并能加速 Web 服务的开发。
JAX-WS 简介
JAX-WS 是用于简化使用 Java 构造 Web 服务和 Web 服务客户机的工作的技术。该技术提供了完整的 Web 服务堆栈,可减少开发和部署 Web 服务的任务。JAX-WS 支持 WS-I Basic Profile 1.1,后者可确保使用 JAX-WS 堆栈开发的 Web 服务能够供采用 WS-I Basic Profile 标准使用任意语言开发的任意客户机使用。JAX-WS 还包括了 Java Architecture for XML Binding (JAXB) 和 SOAP with Attachments API for Java (SAAJ)。
JAXB 提供了一种非常方便的方法来将 XML 模式映射到 Java 代码的表示形式,从而支持数据绑定功能。JAXB 消除了将 SOAP 消息中的 XML 模式消息转换为 Java 代码的工作,因而不必全面了解 XML 和 SOAP 解析。JAXB 规范定义 Java 和 XML 模式之间的绑定。SAAJ 提供了标准的方法来处理 SOAP 消息中包含的 XML 附件。
而且,JAX-WS 提供了用于将传统 Java 对象(Plain Old Java Object,POJO)类转换为 Web 服务的 Annotation 库,从而加速了 Web 服务的开发工作。另外,它还指定了从采用 Web 服务描述语言(Web Services Description Language,WSDL)定义的服务到实现该服务的 Java 类之间的详细映射。采用 WSDL 定义的任意复杂类型都通过遵循 JAXB 规范定义的映射来映射为 Java 类。JAX-WS 之前与 Java Platform, Enterprise Edition (Java EE) 5 绑定。而 JAX-WS 2.0 规范是作为 Java Community Process (JCP) 的 JSR 224 开发的。
学习了IBM的教程《设计与开发 JAX-WS 2.0 Web 服务》,这个教程主要是讲订单处理。还是比较简单,做完后为了加深印象,就自己做了一个最简单的HelloService,采用的是代码优先。使用的JDK为1.6版本的。
首先,写一个类HelloService,这个类发布为服务。
package com.zzz.jaxws.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
* @description
* @version 创建时间:Apr 3, 2009 9:26:15 AM
*/
@WebService(serviceName="HelloService",
portName="HelloServicePort",
targetNamespace="http://jaxws.zzz/jaxws/hello")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class HelloService {
@WebMethod
public String sayHello(String s){
System.out.println("hello,"+s);
return s;
}
}
这个类里用到了Annotation,使用@WebService,定义了服务名,端口名和名称空间。使用@SOAPBinding定义了WSDL的绑定样式,这里采用的是document/literal-wrapped。使用@WebMethod定义了发布的服务。看起来,和普通的Java类没什么区别。
完成了服务类的编写,需要发布服务了。这里是专门写一个发布类来发布服务,我们这里使用JDK1.6中自带的web服务器,把服务发布到它里面。
运行 wsgen 工具,以生成订单处理 Web 服务的 JAX-WS 可移植构件。此工具将读取 Web SEI 类,并生成 Web 服务部署和调用所需的所有构件。wsgen 工具生成需要发布的 Web 服务的 WSDL 文件和 XSD 模式。
为了生成 JAX-WS 构件,首先需要编译服务和 Bean 源文件:
- 打开命令提示符,并进入到 c:\JAXWS-Tutorial目录(我把代码都拷贝到了c:\JAXWS-Tutorial下)。
-
运行以下命令,以编译 Java 文件,并将类文件放入其各自文件夹中:
javac com\zzz\jaxws\service\*.java
- 运行以下命令,以生成 JAX-WS 构件:
wsgen -cp . com.zzz.jaxws.service.HelloService -wsdl
运行此命令后,应该在 JAXWS-Tutorial 文件夹中看到生成的 HelloService.wsdl和 HelloService_schema1.xsd,而且会看到在 com\zzz\jaxws\service\jaxws 文件夹中创建了 JAX-WS 构件。
编写发布类HelloServicePublisher。
package com.zzz.jaxws.service.publisher;
import javax.xml.ws.Endpoint;
import com.zzz.jaxws.service.HelloService;
/**
* @description 发布HelloService.java为服务
* @version 创建时间:Apr 3, 2009 9:37:30 AM
*/
public class HelloServicePublisher {
public void publish(){
Endpoint.publish("http://localhost:8080/services/HelloService",
new HelloService());
}
public static void main(String[] args){
HelloServicePublisher publish = new HelloServicePublisher();
publish.publish();
}
}
这个服务的发布类很简单,就是使用Endpoint.publish()发布。publish() 接受两个参数:Web 服务的位置和 JAX-WS Web 服务实现类。
-
从 c:\JAXWS-Tutorial 文件夹运行以下命令,以编译
HelloServicePublisher
:javac com\zzz\jaxws\service\publisher\HelloServicePublisher.java
- 然后运行以下命令:
java com.zzz.jaxws.service.publisher.HelloServicePublisher
-
打开浏览器,并导航到http://localhost:8080/services/HelloService?wsdl,可以看见生成的WSDL。
到这里服务发布完了,需要编写客户端来调用了。JAX-WS 提供了名为 wsimport 的工具,用于从 WSDL 生成 JAX-WS 可移植构件。生成的可移植构件通常包括以下内容:
- SEI
- 服务(需要实现的服务实现类)
- 从模式类型生成的 JAXB 生成类
- 从 wsdl:fault 映射的异常类(如果有)
客户机使用生成的构件调用 Web 服务。Web 服务客户机并不需要处理任何 SOAP 格式(如创建或解析 SOAP 消息)。这将由 JAX-WS 运行时予以处理,此运行时将使用生成的构件代码(JAXB 生成类)。Web 服务将处理 Java 代码(JAXB 生成类),从而减少了开发 Web 服务客户机和对 Web 服务调用操作的工作。
使用wsimport命令生成客户端使用的构件:
wsimport -keep -p com.zzz.jaxws.service.client http://localhost:8080/services/HelloService?wsdl
-keep
选项指示保留生成的文件,-p
选项指定需要在其中生成构件的包名称。http://localhost:8080/services/HelloService?wsdl
指定 WSDL 文件的位置。
package com.zzz.jaxws.service.client;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
/**
* @description
* @version 创建时间:Apr 3, 2009 9:49:41 AM
*/
public class HelloServiceClient {
private final QName qName=new QName(
"http://jaxws.zzz/jaxws/hello","sayHello");
public static URL getWSDLURL(String urlStr){
URL url = null;
try {
url = new URL(urlStr);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return url;
}
public void process(URL url){
HelloService_Service service = new HelloService_Service(url,qName);
HelloService port = service.getHelloServicePort();
String response = port.sayHello("world");
System.out.println("result:"+response);
}
/**
* @param args
*/
public static void main(String[] args) {
if(args.length!=1){
System.out.println("Please enter parameter.");
return;
}
URL url = getWSDLURL(args[0]);
HelloServiceClient client = new HelloServiceClient();
client.process(url);
}
}
生成HelloService_Service的实例,
getHelloServicePort()
,以检索到服务的代理(也称为端口)。端口实现服务所定义的接口。 sayHello
方法,并同时传入一个字符参数。
要运行 Web 服务客户机,请首先从 JAXWS-Tutorial 文件夹运行以下命令来编译 Web 服务客户机:
javac com\zzz\jaxws\service\client\HelloServiceClient .java
通过使用以下命令提供订单处理 Web 服务的 WSDL URL 来运行 Web 服务客户机:
java com.zzz.jaxws.service.client.HelloServiceClient http://localhost:8080/services/HelloService?wsdl
这时,后在后台看见: hello,world
到这里,已经成功地创建和发布了 Web 服务,并通过 Web 服务客户机成功地执行了此服务。
发表评论
-
流式计算
2022-02-07 14:31 234private void postHandle(List& ... -
消息队列使用的四种场景介绍
2018-08-09 16:34 2410以下介绍消息队列在实际应用中常用的使用场 ... -
设计模式
2018-04-11 16:49 9361.桥梁模式,将抽象部分与实现部分隔离开,抽象部分持有实现 ... -
Spring boot web可以访问Service和Mapper层
2018-03-26 16:42 2796Spring boot的web层可以访问Service层,然 ... -
FreeMarker的基础语法使用 && 心得和技巧
2018-01-10 10:03 1934FreeMarker是一个模板引 ... -
webService----wss4j+cxf实现WS-Security(基于UsernameToken)
2017-10-23 18:58 1505分享一下wss4j+cxf基于UsernameToken的安 ... -
Spring MVC之LocaleResolver(解析用户区域)
2017-09-23 15:55 2442为了让web应用程序支持国际化,必须识别每个用户的首选区域, ... -
(转)java泛型
2016-11-12 20:29 1594http://www.cnblogs.com/lwbqqyu ... -
java中如何忽略字符串中的转义字符--转载
2016-06-28 16:42 9805原文地址:http://my ... -
(转)关于JAP FetchType.LAZY(hibernate实现)的理解 .
2016-04-27 15:22 5042JPA定义实体之间的关系有如下几种: @OneToOne ... -
(转)hibernate annotation注解方式来处理映射关系
2016-04-26 16:52 1791http://www.cnblogs.com/xiao ... -
代码片段,导出的文件头
2015-11-18 20:34 1559public static void setDownload ... -
(转)为什么要两次调用encodeURI来解决乱码问题
2015-08-03 20:19 2425地址:http://blog.csdn.net/howla ... -
杀死进程
2015-07-21 14:54 1235sudo lsof -i :9000 COMMAND P ... -
批处理batch,执行多个SQL语句
2015-07-15 19:21 10545批处理batch,执行多个SQL语句。 ... -
中文乱码解决的4种方式
2015-07-03 14:20 2578目前收集到4中方法,中文传参一documentPath为例: ... -
GET请求的中文乱码问题及处理意义
2015-07-03 13:47 6595首先看一段乱码的程序 ... -
java.ByteArrayInputStream与ByteArrayOutputStream再次理解
2015-03-16 17:59 3194第一次看到ByteArrayOutputStream的时 ... -
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
2014-07-28 17:42 2216概述 继 Spring 2.0 对 Spring MVC ... -
java中序列化的serialVersionUID解释
2014-07-25 09:26 1843serialVersionUID: 字面意思上是序列化的版本号 ...
相关推荐
一个简单的jax-ws实现的例子,已经分连个项目,一个是服务端,一个客户端
本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 ...
自己自学JAX-WS的心得,内含较为详细的讲解了简单的例子。文档目录如下: JAX-WS自学笔记 本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java...
NULL 博文链接:https://hwei199.iteye.com/blog/2272572
JAX-WS发布webservice例子,基于http://blog.csdn.net/yy_love_my/article/details/44938329所说的做的一个简单且能运行的列子,基于maven工程,如果使用servlet发布方式,执行命令:mvn tomcat7:run
JavaWeb服务SOAP(jax-ws)和REST(jax-rs)规范,CXF整合Spring和未整合Spring的简单例子。结合说明看,简单易懂:my.oschina.net/lock0818/blog/314120
NULL 博文链接:https://wuhongyu.iteye.com/blog/807836
对webservice入门是很好的例子 使用webservice注解 基于jax ws jdk自带实现 知识点在readme txt中有详细介绍
这个webservicedemo里面写的是一个简单例子。说明webservice的工作原理。使用的jax-ws 有jdk6自己实现的方法。详细情况请看里面的readme.txt 有很详细的说明
play-jax-ws 使用 Play Framework 公开您的 JAX-WS SOAP 服务。 例子 请参阅example-scala和example-java 。 设置 build.sbt添加到您的build.sbt文件中: resolvers += "Koofr Github repo" at ...
主要针对JDK1.6自带的web service提供简单的例子,主要提供调用前的权限校验,根据用户名和密码来看调用者是否有调用权限。
调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。
调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。
ws-例子Glassfish Metro的JAX-WS示例
jax-rpc soap头扩展 客户端,服务端例子 ws-tipjax2SOAPHandler.ear,ws-tip-extend.zip 官方也有下载的
这个小实例有server和client的代码,server直接用myeclipse导入,然后添加spring2.0 aop和core,xfire1.2即可.client也是直接导入项目,然后导入jax-ws2.1api和jax-ws2.1 runtime libraries即可.这些包通过点击项目...
jax-ws 与 spring 整合的简单例子:详情请查看http://poshidi.com/jax-ws-spring
webservice简单例子, 使用jax-ws实现
webservice详细例子,详细请看: jax-ws 与 spring的整合(下) http://poshidi.com/jax-ws-spring2