maven与spring_与Spring和Maven签约首个SOAP服务

maven与spring

1.简介

在本教程中,我们将学习使用JAX-WS,Spring和Maven实施合同优先的SOAP服务应用程序。 这是使用合同优先还是代码优先方法的更多设计决定。

在开发基于SOAP的Web服务应用程序时使用应用合同优先的方法最显着的好处是,可以在对合同进行必要的更改后立即与消费者/客户共享合同,因此客户应用程序和Web服务操作实施可以由不同团队同时独立完成,从而节省了大量时间。

2.实施

无标题图

上面的场景是这样的场景,客户端/消费者应用程序将通过服务端点与我们的示例基于SOAP的JAX-WS Web服务示例进行交互。

首先从实现开始,首先在Eclipse中创建一个Maven项目,并确保我们继续使用与下面所示内容相似的目录结构。

项目结构

首先是查看我们的pom依赖关系,它应该类似于:

pom.xml

<dependencies><!-- Spring dependencies --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.1.RELEASE</version></dependency><!-- JAX-WS dependencies --><dependency><groupId>org.jvnet.jax-ws-commons.spring</groupId><artifactId>jaxws-spring</artifactId><version>1.9</version></dependency><dependency><groupId>com.sun.xml.ws</groupId><artifactId>jaxws-rt</artifactId><version>2.2.8</version></dependency>
</dependencies>
<build><finalName>SOAPWebServiceExample</finalName><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>jaxws-maven-plugin</artifactId><version>1.12</version><configuration><wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory><packageName>com.jcombat.ws</packageName><keep>true</keep><sourceDestDir>${basedir}/target/generated/src/main/java</sourceDestDir></configuration><executions><execution><id>wsdl_import</id><goals><goal>wsimport</goal></goals></execution></executions></plugin></plugins>
</build>

请注意我们将使用的wsimport工具,以便稍后从WSDL文件生成存根文件。

现在让我们检查一下web.xml文件。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>SOAPWebServiceExample</display-name><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>customer</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>customer</servlet-name><url-pattern>/customer</url-pattern></servlet-mapping></web-app>

接下来,我们为我们的Web服务创建一个模式文件 。 将其命名为customerService.xsd ,这将基本上为我们将要创建的WSDL文件或Web服务合同定义构造块。

customerService.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ws.jcombat.com/"xmlns:tns="http://ws.jcombat.com/" elementFormDefault="qualified"><element name="CustomerServiceRequest" type="tns:CustomerServiceRequestType"></element><complexType name="CustomerServiceRequestType"><sequence><element name="customerId" type="int"></element></sequence></complexType><complexType name="CustomerServiceResponseType"><sequence><element name="customer" type="tns:Customer" maxOccurs="unbounded"minOccurs="0"></element></sequence></complexType><element name="CustomerServiceResponse" type="tns:CustomerServiceResponseType"></element><complexType name="Customer"><sequence><element name="id" type="int" maxOccurs="1" minOccurs="1"></element><element name="name" type="string" maxOccurs="1" minOccurs="1"></element></sequence></complexType>
</schema>

使用我们刚创建的XML模式创建一个有效的WSDL文件。

customerService.wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitionsxmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://ws.jcombat.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.jcombat.com/"name="customerService"><wsdl:types><xsd:schema targetNamespace="http://ws.jcombat.com/"><xsd:import namespace="http://ws.jcombat.com/"schemaLocation="../schema/customerService.xsd" /></xsd:schema></wsdl:types><wsdl:message name="CustomerServiceRequest"><wsdl:part name="CustomerServiceRequest" element="tns:CustomerServiceRequest" /></wsdl:message><wsdl:message name="CustomerServiceResponse"><wsdl:part name="CustomerServiceResponse" element="tns:CustomerServiceResponse" /></wsdl:message><wsdl:portType name="CustomerServicePortType"><wsdl:operation name="getCustomer"><wsdl:input name="CustomerServiceRequest" message="tns:CustomerServiceRequest" /><wsdl:output name="CustomerServiceResponse" message="tns:CustomerServiceResponse" /></wsdl:operation></wsdl:portType><wsdl:binding name="CustomerEndpointPortBinding" type="tns:CustomerServicePortType"><soap:binding style="document"transport="http://schemas.xmlsoap.org/soap/http" /><wsdl:operation name="getCustomer"><soap:operation style="document" soapAction="getCustomer" /><wsdl:input name="CustomerServiceRequest"><soap:body use="literal" /></wsdl:input><wsdl:output name="CustomerServiceResponse"><soap:body use="literal" /></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="customerService"><wsdl:port name="CustomerEndpointPort" binding="tns:CustomerEndpointPortBinding"><soap:address location="http://localhost:8080/SOAPWebServiceExample/customer" /></wsdl:port></wsdl:service>
</wsdl:definitions>

接下来是从WSDL文件生成存根文件。 为此,请在系统的命令提示符下运行以下命令。

mvn clean install

/ target目录中签出生成的存根文件。

存根

现在,在名为CustomerServiceImpl的类中创建生成的服务接口CustomerServicePortType的实现。

CustomerServiceImpl.java

package com.jcombat.service;import javax.jws.WebService;import com.jcombat.ws.Customer;
import com.jcombat.ws.CustomerServicePortType;
import com.jcombat.ws.CustomerServiceRequestType;
import com.jcombat.ws.CustomerServiceResponseType;@WebService(endpointInterface="com.jcombat.ws.CustomerServicePortType")
public class CustomerServiceImpl implements CustomerServicePortType {public CustomerServiceResponseType getCustomer(CustomerServiceRequestType customerServiceRequest) {final CustomerServiceResponseType response = new CustomerServiceResponseType();Customer customer = new Customer();customer.setId(123);customer.setName("Ramesh");response.getCustomer().add(customer);return response;}}

必须将@WebService批注应用于端点接口实现类,才能将其标记为Web服务端点。 @WebService批注告诉服务器运行时环境将该类的所有公共方法公开为Web服务方法。

我们已经完成了该应用程序。 最终检查是,当点击以下端点URI时,是否可以看到显示的WSDL内容,我们已将其指定的位置指向WSDL文件的底部。

  • http:// localhost:8080 / SOAPWebServiceExample / customer?wsdl

下面是我们在浏览器中看到的内容。

wsdl-1

是的,我们成功做到了。

3.运行应用程序

使用WSDL URI(http:// localhost:8080 / SOAPWebServiceExample / customer?wsdl)在SOAP UI中设置SOAP项目。

下面是当我们在SOAP UI中实际命中服务时看到的内容。

SOAP-1

4.下载源代码

  • 下载源代码

翻译自: https://www.javacodegeeks.com/2016/02/contract-first-soap-service-spring-maven.html

maven与spring

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

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

相关文章

如何维持手机电池寿命_充电小知识:你知道如何正确充电吗?这几种充电方式最损害电池...

目前基本上大部分人都至少有一部智能手机&#xff0c;智能手机基本上都需要每日一充&#xff0c;你的充电方式会不会损伤电池呢&#xff1f;有部分消费者认为要等到手机电量耗尽后再充电&#xff0c;还有人认为手机充电要充至100%才能拔下来&#xff0c;有人觉得充电宝等产品给…

【开放集检测】OpenGAN: Open-Set Recognition via Open Data Generation 论文阅读

文章目录 英语积累为什么使用GAN系列网络进行开放集检测摘要1. 前言2. 相关工作开集检测基于GAN网络的开集检测基于暴露异常数据的开集检测 3. OpenGAN3.1 公式建模3.1.1 二分类方法存在问题如何解决 3.1.2 使用合成数据存在问题如何解决 3.1.3 OpenGAN3.1.4 模型验证 3.2 先前…

sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中

sso集成shiro介绍 单一登录&#xff08;SSO&#xff09;和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案&#xff0c;尤其是在迁移到云中时。 本文讨论了Keycloak与jBPM或Drools应用程序的集成&#xff0c;以便使用Keycloak上提供的所有功能。 Keycloak…

jbpm 和 drools_jBPM和Drools工作台中的用户和组管理

jbpm 和 drools介绍 本文讨论了一项新功能&#xff0c;该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装&#xff0c;设置和使用此功能之前&#xff0c;本文讨论了一些以前的概念&#xff0c;需要进一步理…

从事java编程技能要求_5道Java视频课程,提高您的编程技能

从事java编程技能要求作为Web开发人员&#xff0c;跟上技术知识可能会很棘手。 新技术似乎每天都在弹出&#xff0c;而基本技术也看到了重复迭代的浪潮&#xff0c;增加了新的功能。 Java开发人员应该做什么&#xff1f; 这是在线教育平台发挥作用的地方。 它们可以帮助您快速…

sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;*声明&#xff1a;《缺陷周话》栏目系列文章由奇安信代码卫士团队原创出品。未经许可&#xff0c;禁止转载。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。代码审计是使用静态分析发现源代码中安全缺陷的方法&…

idea添加jboss_如何将云持久存储添加到JBoss Cool Store

idea添加jboss我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月&#xff0c;我们带来了一个完整的零售示例&#xff0c;其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&…

ssm影城项目_影场与属性访问器界面

ssm影城项目卡尔迪亚&#xff08;Carl Dea&#xff09;最近跟踪了我的一篇名为“ 保存内存”的博客文章&#xff01; 为属性使用阴影字段 。 在他的博客中&#xff0c;他建议使用称为“属性访问器”的接口来消除大量使用样板代码所需的样板代码。 卡尔还提到他尚未用大量数据测…

java流写入数据库_Java 8:在2分钟内将智能流与数据库一起使用

java流写入数据库快速流媒体 当Java 8最终问世时&#xff0c;我和一些大学开始了一个开源项目&#xff0c;以利用Java 8的流库使整个Java / DB问题更进一步&#xff0c;以便将数据库表视为纯Java 8流。 速度诞生了&#xff01; 哇&#xff0c;现在我们可以做类型安全的数据库应…

小米摄像头有onvif协议_监控摄像头完好但图像不行,肯定逃不过这10个问题

摄像头仅仅是视频监控系统的一部分&#xff0c;即使摄像头完好无损&#xff0c;监控画面也可能会出现不显示、卡顿、丢失等情况。想要彻底解决网络监控的问题&#xff0c;往往需要排查各个连接设备才可以判断。下面我们就总结了10个问题&#xff0c;彻底解决网络监控的问题。一…

java对话_您应该保持联系的十大高级Java对话

java对话在线讲座和视频是学习软件开发新事物的主要资源之一。 您可以找到Java专家与您分享他们的经验&#xff0c;而不必坐下来。 在下面的文章中&#xff0c;我们收集了10位我们最喜欢的演讲者和主题&#xff0c;我们相信每个Java开发人员都应该注意。 获取爆米花&#xff0…

【WebRTC---源码篇】(三)Windows/Linux音视频采集封装模块

视频采集相关类图 DeviceInfo接口提供了设备枚举相关功能。 NumberOfDevices枚举设备个数。 GetDeviceName获取某个设备名称。 GetCapability枚举某个设备所支持的所有能力(VideoCaptureCapability: 分辨率,最大帧率,颜色类型) VideoCaptureModule视频采集模块的基类: …

java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏

宝藏坚持每天拣单词积累你的词汇宝藏打好英语学习基本功怎么学&#xff1f;每天预留15分钟&#xff0c;积累你的词汇宝藏&#xff01;每周一、二、三&#xff0c;发布新单词每周四、五、六&#xff0c;乱序复习单词周日测试(仅限入群的学员)遇到新单词&#xff0c;你可以&#…

spring多个视图解析器_在Spring中配置多个View解析器

spring多个视图解析器1.简介 在Spring中&#xff0c;提供了View Resolver来使用模型中可用的数据来解析视图&#xff0c;而无需与JSP&#xff0c;Velocity或Thymeleaf等View技术紧密绑定。 Spring可以根据需要轻松灵活地配置一个或多个View Resolver 。 2. Spring MVC应用程序…

单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮

单选按钮:after对于MQTT.fx&#xff0c;我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码&#xff1a; 我发现在ToggleGroup的上下文中&#xff0c;ToggleButton在选择/取消选择方面的行为与RadioButtons不同&#xff1a;与RadioButtons不同&#xff0c;ToggleButtons仍…

【技术解决方案】开发工具源码安装包大全

汇总下载链接 下载地址 QT下载以及安装 各版本QT下载地址 1.安装中根据不同的开发环境勾选相应的&#xff0c;如果使用VS编译请先安装VS和SDK然后再安装QT。 使用VS时CDB调试支持需要勾选 QTCreator断点调试需要下载SDK,Windows的SDK下载地址&#xff0c;只需要安装勾选如…

垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器

垃圾收集算法,垃圾收集器StackOverflow问题查找正在运行哪种类型的垃圾收集 器&#xff0c;jvm的默认垃圾收集器 &#xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器&#xff1f; &#xff0c;以及如何知道HotSpot jvm的当前GC策略&#xff1f; 以及博客文章如何以编程…

树与堆的基本概念

当看到这里的时候&#xff0c;相信你的链表&#xff0c;队列&#xff0c;栈学的也差不多可以了&#xff0c;那么接下来让我们一起进入树的学习吧&#xff01; 一.树的概念以及一些知识记忆 树的定义&#xff1a; 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08…

jboss war包放哪_如何将JBoss HR Employee Rewards项目放入云端

jboss war包放哪我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 我们从头到尾讨论了各个层次&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发工具。 到目前为止&am…

hotspot 垃圾收集器_HotSpot增量Java垃圾收集器

hotspot 垃圾收集器在我最近的博客文章“ 确定活动的HotSpot垃圾收集器”中 &#xff0c;我描述了可用于确定HotSpot JVM &#xff08;Java进程&#xff09;正在使用的垃圾收集器&#xff08;当从命令行参数&#xff08;标志&#xff09;中变得不明显时&#xff09;的不同方法。…