jax-rs jax-ws_Tomcat上具有JAX-WS的Web服务

jax-rs jax-ws

让我们假设一家企业正在一个集中式系统中维护用户身份验证详细信息。 我们需要创建一个AuthenticationService,它将获取凭据,对其进行验证并返回状态。 其余的应用程序将使用AuthenticationService对用户进行身份验证。







创建AuthenticationService接口,如下所示:

package com.sivalabs.caas.services;
import javax.jws.WebService;import com.sivalabs.caas.domain.AuthenticationStatus;
import com.sivalabs.caas.domain.Credentials;
import com.sivalabs.caas.exceptions.AuthenticationServiceException;@WebService
public interface AuthenticationService
{
public AuthenticationStatus authenticate(Credentials credentials) throws AuthenticationServiceException;
}
package com.sivalabs.caas.domain;
/*** @author siva**/
public class Credentials 
{private String userName;private String password;public Credentials() 
{}public Credentials(String userName, String password) {super();this.userName = userName;this.password = password;}//setters and getters}
package com.sivalabs.caas.domain;/*** @author siva**/
public class AuthenticationStatus
{private String statusMessage;private boolean success;//setters and getters}
package com.sivalabs.caas.exceptions;/*** @author siva**/
public class AuthenticationServiceException extends RuntimeException
{private static final long serialVersionUID = 1L;public AuthenticationServiceException(){}public AuthenticationServiceException(String msg){super(msg);}
}

现在让我们实现AuthenticationService。

package com.sivalabs.caas.services;import java.util.HashMap;
import java.util.Map;import javax.jws.WebService;import com.sivalabs.caas.domain.AuthenticationStatus;
import com.sivalabs.caas.domain.Credentials;
import com.sivalabs.caas.exceptions.AuthenticationServiceException;/*** @author siva**/
@WebService(endpointInterface="com.sivalabs.caas.services.AuthenticationService",serviceName="AuthenticationService", targetNamespace="http://sivalabs.blogspot.com/services/AuthenticationService")
public class AuthenticationServiceImpl implements AuthenticationService
{private static final Map<string, string> CREDENTIALS = new HashMap<string, string>();static{CREDENTIALS.put("admin", "admin");CREDENTIALS.put("test", "test");  }@Overridepublic AuthenticationStatus authenticate(Credentials credentials) throws AuthenticationServiceException{if(credentials == null){throw new AuthenticationServiceException("Credentials is null");}AuthenticationStatus authenticationStatus = new AuthenticationStatus();String userName = credentials.getUserName();String password = credentials.getPassword();if(userName==null || userName.trim().length()==0 || password==null || password.trim().length()==0){authenticationStatus.setStatusMessage("UserName and Password should not be blank");authenticationStatus.setSuccess(false);}else{if(CREDENTIALS.containsKey(userName) && password.equals(CREDENTIALS.get(userName))){authenticationStatus.setStatusMessage("Valid UserName and Password");authenticationStatus.setSuccess(true);}else{authenticationStatus.setStatusMessage("Invalid UserName and Password");authenticationStatus.setSuccess(false);}}return authenticationStatus;}
}

为了简单起见,我们在此根据存储在HashMap中的静态数据检查凭据。 在实际的应用程序中,将根据数据库进行此检查。

现在,我们将发布WebService。

package com.sivalabs.caas.publisher;import javax.xml.ws.Endpoint;import com.sivalabs.caas.services.AuthenticationServiceImpl;public class EndpointPublisher
{public static void main(String[] args){Endpoint.publish("http://localhost:8080/CAAS/services/AuthenticationService", new AuthenticationServiceImpl());}}

运行此独立的类以发布AuthenticationService。

要检查服务是否已成功发布,请将浏览器指向URL http:// localhost:8080 / CAAS / services / AuthenticationService?wsdl。 如果该服务成功发布,您将看到WSDL内容。

现在,让我们创建一个独立测试客户端来测试Web服务。

package com.sivalabs.caas.client;import java.net.URL;import javax.xml.namespace.QName;
import javax.xml.ws.Service;import com.sivalabs.caas.domain.AuthenticationStatus;
import com.sivalabs.caas.domain.Credentials;
import com.sivalabs.caas.services.AuthenticationService;/*** @author siva**/
public class StandaloneClient
{public static void main(String[] args) throws Exception{URL wsdlUrl = new URL("http://localhost:8080/CAAS/services/AuthenticationService?wsdl");QName qName = new QName("http://sivalabs.blogspot.com/services/AuthenticationService", "AuthenticationService");Service service = Service.create(wsdlUrl,qName);AuthenticationService port = service.getPort(AuthenticationService.class);Credentials credentials=new Credentials();credentials.setUserName("admin1");credentials.setPassword("admin");AuthenticationStatus authenticationStatus = port.authenticate(credentials);System.out.println(authenticationStatus.getStatusMessage());credentials.setUserName("admin");credentials.setPassword("admin");authenticationStatus = port.authenticate(credentials);System.out.println(authenticationStatus.getStatusMessage());}}

不用我们自己编写StandaloneClient,我们可以使用wsimport命令行工具生成Client。

wsimport工具在JDK / bin目录中。

转到项目的src目录,然后执行以下命令。

wsimport -keep -p com.sivalabs.caas.client http:// localhost:8080 / CAAS / services / AuthenticationService?wsdl

它将在com.sivalabs.caas.client软件包中生成以下Java和类文件。

Authenticate.java
AuthenticateResponse.java
AuthenticationService_Service.java AuthenticationService.java AuthenticationServiceException_Exception.java AuthenticationServiceException.java AuthenticationStatus.java Credentials.java ObjectFactory.java 包信息.java

现在,您可以使用生成的Java文件来测试服务。

public static void main(String[] args) throws Exception
{AuthenticationService_Service service = new AuthenticationService_Service();com.sivalabs.caas.client.AuthenticationService authenticationServiceImplPort = service.getAuthenticationServiceImplPort();com.sivalabs.caas.client.Credentials credentials = new com.sivalabs.caas.client.Credentials();credentials.setUserName("admin1");credentials.setPassword("admin");com.sivalabs.caas.client.AuthenticationStatus authenticationStatus = authenticationServiceImplPort.authenticate(credentials);System.out.println(authenticationStatus.getStatusMessage());credentials.setUserName("admin");credentials.setPassword("admin");authenticationStatus = authenticationServiceImplPort.authenticate(credentials);System.out.println(authenticationStatus.getStatusMessage());
}

现在,我们将看到如何在Tomcat服务器上部署JAX-WS WebService。

我们将在apache-tomcat-6.0.32上部署在http://sivalabs.blogspot.com/2011/09/developing-webservices-using-jax-ws.html中开发的AuthenticationService。

要部署我们的AuthenticationService,我们需要添加以下配置。

1.web.xml

<web-app><listener><listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class></listener><servlet><servlet-name>authenticationService</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>authenticationService</servlet-name><url-pattern>/services/AuthenticationService</url-pattern></servlet-mapping>
</web-app>

2.创建一个新文件WEB-INF / sun-jax-ws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpointsxmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"version="2.0"><endpointname="AuthenticationService"implementation="com.sivalabs.caas.services.AuthenticationServiceImpl"url-pattern="/services/AuthenticationService"/></endpoints>

3.从http://jax-ws.java.net/下载JAX-WS参考实现。

将所有jar文件从jaxws-ri / lib文件夹复制到WEB-INF / lib。

现在,将应用程序部署在Tomcat服务器上。
您不需要像使用EndpointPublisher那样由我们自己发布服务。
Tomcat启动并运行后,请在http:// localhost:8080 / CAAS / services / AuthenticationService?wsdl中查看生成的wsdl。

现在,如果您使用独立客户端测试AuthenticationService,它将可以正常工作。

public static void testAuthenticationService()throws Exception
{URL wsdlUrl = new URL("http://localhost:8080/CAAS/services/AuthenticationService?wsdl");QName qName = new QName("http://sivalabs.blogspot.com/services/AuthenticationService", "AuthenticationService");Service service = Service.create(wsdlUrl,qName);AuthenticationService port = service.getPort(AuthenticationService.class);Credentials credentials=new Credentials();credentials.setUserName("admin");credentials.setPassword("admin");AuthenticationStatus authenticationStatus = port.authenticate(credentials);System.out.println(authenticationStatus.getStatusMessage());
}

但是,如果尝试使用wsimport工具生成的客户端代码进行测试,请确保在客户端类路径中没有jax-ws-ri jar。

否则,您将得到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1162)at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:898)

参考: “ 我的实验”博客上的 JCG合作伙伴 Siva Reddy提供了使用JAX-WS开发WebServices和在Tomcat-6上部署JAX-WS WebService的信息 。


翻译自: https://www.javacodegeeks.com/2012/03/web-services-with-jax-ws-on-tomcat.html

jax-rs jax-ws

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang反编译_【Golang】脱胎换骨的defer(一)

Go语言的defer是一个很方便的机制&#xff0c;能够把某些函数调用推迟到当前函数返回前才实际执行。我们可以很方便的用defer关闭一个打开的文件、释放一个Redis连接&#xff0c;或者解锁一个Mutex。而且Go语言在设计上保证&#xff0c;即使发生panic&#xff0c;所有的defer调…

【TypeScript系列教程16】TypeScript 联合类型

TypeScript 联合类型 联合类型(Union Types)可以通过管道 (|) 将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错。 创建联合类型的语法格式如下 Type1|Type2|Type3 实例 声明一个联合类型: TypeScript var …

HTML 4.01 规定了三种文档类型

HTML 4.01 规定了三种文档类型&#xff1a;Strict、Transitional 以及 Frameset。 严格的——该 DTD 包含所有 HTML 元素和属性&#xff0c;但不包括展示性的和弃用的元素&#xff08;比如 font&#xff09;。不允许框架集&#xff08;Framesets&#xff09;。 <!DOCTYPE HT…

cad填充图案乱理石_CAD软件中如何自定义CAD填充图案?

在使用浩辰CAD软件绘制完成图纸后&#xff0c;发现自己绘制的CAD图纸没有做好区域分割&#xff0c;显得特别乱。这个时候该怎么办呢&#xff1f;快试试CAD填充图案吧&#xff01;接下来就由小编来给大家介绍一下浩辰CAD软件中自定义CAD填充图案的操作教程吧&#xff01;浩辰CAD…

单例设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

Vue.js 组件编码规范

提供一种统一的编码规范来编写 Vue.js 代码。这使得代码具有如下的特性&#xff1a;* 其它开发者或是团队成员更容易阅读和理解。 * IDEs 更容易理解代码&#xff0c;从而提供高亮、格式化等辅助功能 * 更容易使用现有的工具 * 更容易实现缓存以及代码包的分拆基于模块开发始终…

centos图形化桌面的文件在哪_CentOS 安装图形桌面

1.显示系统已经安装的组件&#xff0c;和可以安装的组件:#yum grouplist|grep -i "x window"2.如果系统安装之初采用最小化安装&#xff0c;没有安装xwindow&#xff0c;那么先安装&#xff1a;#yum groupinstall "X Window System"3.安装GNOME桌面环境yum…

java高级架构师进阶路线,年薪百万的架构师都是按照这个路线学习的

一个合格的架构师,在接到这些产品,业务需求的时候,一定要能够全面的思考,给出除了业务需求外的系统需求,并要求自己或其他同学要去设计和实现这些系统需求。 所以你需要掌握这些知识点 目录 1.基本功 七大软件设计原则 设计模式 2.架构师审美观 spring源码分析

每天一个linux命令(53)--ps命令

要毁掉一天&#xff0c;从早上开始。 Linux中的ps命令是 process status 的缩写。ps 命令用来列出系统中当前运行的那些进程。ps 命令列出的是当前那些进程的快照&#xff0c;就是执行ps 命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用…

ansi编码转换_8b/1b编码是个什么东东

使用串行比并行总线可以节省更多的布线空间&#xff0c;芯片、电缆等的尺寸可以做得更小&#xff0c;同时传输速率更高。但是&#xff0c;在很多数字系统如CPU、DSP、FPGA等内部&#xff0c;进行数据处理的最小单位都是Byte&#xff0c;即8个bit&#xff0c;如何把一个或多个By…

格拉布斯准则异常数据_异常处理准则和最佳实践

格拉布斯准则异常数据让我们回顾一些基本的异常设计准则&#xff0c;这些准则从“对象设计&#xff1a;角色&#xff0c;职责和协作”中进行了总结&#xff08;Rebecca Wirfs-Brock和Alan McKean&#xff0c;Addison-Wesley&#xff0c;2003年&#xff09;。 不要尝试处理编码错…

使用CSDN云服务搭建一个WordPress 个人站点(详细教程)

目录 前言 站点效果图 搭建服务的一些准备工作 第一步。进入到云服务我的账号模块&#xff0c;创建一个项目&#xff0c; 第二步&#xff0c;先免费领取一台云主机&#xff0c; 第三步&#xff0c;进入云主机控制台 搭建站点操作步骤 第一步&#xff0c;登录云主机 第二…

echarts 卡_图表太丑怎么破,ECharts神器带你飞!

一、前言在本专栏或文集中&#xff0c;我曾多次使用ECharts绘制图表、进行可视化&#xff0c;也渐渐积累了30多个实例&#xff0c;本文对此前用过的所有图表和代码进行整理并分享&#xff0c;以给想绘制精美图表的人一点绵薄的帮助。其中全部实例已上传ECharts3官网的个人主页&…

Apache Lucene基础教程

课程大纲 Apache Lucene是一个免费/开源信息检索软件库&#xff0c;它提供基于Java的索引和搜索技术&#xff0c;以及拼写检查&#xff0c;命中突出显示和高级分析/令牌化功能。 Lucene是完全用Java编写的高性能&#xff0c;功能齐全的文本搜索引擎库。 它是一项适用于几乎所有…

使用CSDN云服务搭建一个WordPress 个人站点(视频教程)

目录 前言 视频教程 文字版教程 云主机体验地址 官方文档 前言 六一儿童节体验了一下CSDN云主机相关的服务&#xff0c;感觉最近官方最近变化很大&#xff0c;业务范围很广&#xff0c;这里简单体验了一下云主机&#xff0c;给大家分享一点心得&#xff0c;希望对大家有所启…

sql性能优化之多表联查

先贴上我优化后的核心代码&#xff1a; select * into #result from ( select p.AchivementCount,isnull(a.ByAttentionCount,0) ByAttentionCount, u.Id,u.FullName,j.Name PostionName,u.ProfessionId,u.Disabled,u.UserName,u.ResearchArea,u.PositionId,u.DepartmentId,u.O…

石板切割问题c语言_岩知识 | 岩板切板有讲究,工艺问题要注意

岩板的火继续烧着&#xff0c;岩板的深加工厂在不断地增加着&#xff0c;岩板的深加工产品正在走向各个建筑项目&#xff0c;逐渐在受到很多项目的宠爱。岩板作为与天然石材完全不同的产品&#xff0c;其优越的理化性能在许多方面胜过天然石材&#xff0c;但也有其严重的不足。…

JavaScript测验题回顾-刷题笔记001

目录 1.我们可以在下列哪个 HTML 元素中放置 Javascript 代码&#xff1f;​编辑 2.写 "Hello World" 的正确 Javascript 语法是&#xff1f; 3.插入 Javacript 的正确位置是&#xff1f; 4.引用名为 "xxx.js" 的外部脚本的正确语法是&#xff1f; 5.如…

C/C++中无条件花括号的妙用

C/C中无条件花括号可以形成一个代码块&#xff0c;一个作用域。可以使括号内定义的变量就只在本域&#xff08;就是这个大括号&#xff09;内有效&#xff0c;而且不会影响其他域&#xff0c;即使名字相同。 在花括号内&#xff0c;如果变量前面带类型&#xff0c;则相当于新创…

java 方法委托托管_Java Web托管选项流程图

java 方法委托托管我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 在带有嵌入式服务器的Eclipse中创建它很好&#xff0c;但是如何将它带给人们呢&#xff1f; 长期以来&#xff0c;对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近发生了…