orcad自上而下_开发自上而下的Web服务项目

orcad自上而下

这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。

第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开:在大多数情况下,将类转换为端点只需在代码中添加少量注释即可。

但是,在使用已定义的合同开发服务时,使用自顶向下方法要简单得多(有效),因为wsdl-to-java工具可以生成与WSDL匹配的带注释的代码。 这是在多种情况下(例如以下情况)的首选解决方案:

  • 创建一个服务,该服务遵循预先开发的XML Schema和WSDL;
  • 公开符合第三方规定的合同的服务(例如,使用已定义的一组消息调用该服务的供应商);
  • 在保持与较旧客户端的兼容性的同时,替换现有Web Service的实现(不得更改合同)。

在下一部分中,将提供一个自上而下的 Web Service端点开发示例,以及一些有关开发人员在进行编码时必须意识到的约束的详细信息,无论选择哪种方法。

使用自上而下的方法创建Web服务

为了建立一个包括Web服务端点和JAX-WS客户端的完整项目,我们将使用两个Maven项目。 第一个将是一个标准的webapp-javaee7项目,其中将包含Web服务端点。 第二个只是一个快速启动的Maven项目,它将对Web Service执行一个测试用例。

让我们像往常一样开始创建服务器项目:

mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7  -DarchetypeVersion=0.4-SNAPSHOT -DarchetypeRepository=https://nexus.codehaus.org/content/repositories/snapshots  -DgroupId=com.itbuzzpress.chapter2.wsdemo -DartifactId=ws-demo2 -Dversion=1.0 -Dpackage=com.itbuzzpress.chapter2.wsdemo  -Darchetype.interactive=false --batch-mode --update-snapshots archetype:generate

下一步将是根据WSDL合同创建Web服务接口和存根。 步骤与为同一合同建立客户的步骤相似。 唯一的区别是wsconsume脚本会将生成的源文件输出到我们的Maven项目中:

$ wsconsume.bat -k CustomerService.wsdl -o ws-demo-wsdl\src\main\java

除了本章开头已经讨论过的生成的类之外,我们还需要提供一个包含Web服务功能的服务端点实现

@WebService(endpointInterface="org.jboss.test.ws.jaxws.samples.webresult.Customer")
public class CustomerImpl implements Customer {public CustomerRecord locateCustomer(String firstName, String lastName, USAddress address) {CustomerRecord cr = new CustomerRecord();cr.setFirstName(firstName);cr.setLastName(lastName);return cr;}
}

端点实现类实现端点接口,并通过@WebService批注引用它。 我们的WebService类什么也没做,只是使用接收到的参数作为输入创建一个CustomerRecord对象。 在一个真实的示例中,您将使用例如持久层来收集CustomerRecord。

一旦将实现类包含在项目中,则需要将项目打包并部署到目标容器,这将使用与该工具使用的相同的合约公开服务端点。

还可以在服务接口的@WebService wsdlLocation属性中引用本地WSDL文件,并将该文件包含在部署中。 这样可以准确地提供所提供的文档。

如果要将Web服务部署到WildFly应用程序服务器,则可以从管理控制台(如管理控制台)中检查端点现在是否可用。 选择“上层运行时”选项卡,然后单击“子系统左侧”选项中包含的“ Web服务”链接:

image003

JAX-WS端点的需求

无论选择哪种方法来开发JAX-WS端点,实际的实现都需要满足一些要求:

  • 必须使用j avax.jws.WebServicejavax.jws.WebServiceProvider批注对实现类进行批注。
  • 实现类可以通过@WebService批注的endpointInterface元素显式引用服务终结点接口,但并非必须如此。 如果@WebService中没有指定endpointInterface,服务端点接口被隐含的实现类定义。
  • 实现类的业务方法必须是公共的,并且不能声明为静态或最终的。
  • javax.jws.WebMethod批注将在要向Web服务客户端公开的业务方法上使用; 如果没有使用@WebMethod注释任何方法,则将公开所有业务方法。
  • 向Web服务客户端公开的业务方法必须具有与JAXB兼容的参数和返回类型。
  • 实现类不能声明为final,并且不能抽象。
  • 实现类必须具有默认的公共构造函数,并且不能定义finalize方法。
  • 实现类可以在其方法中将javax.annotation.PostConstructjavax.annotation.PreDestroy注释用于生命周期事件回调。

构建和运行JAX-WS客户端的要求

JAX-WS客户端可以是任何Java项目的一部分,并且不需要明确要求它是部署在JavaEE容器上的JAR / WAR归档的一部分。 例如,客户端可以简单地包含在快速入门Maven项目中,如下所示:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.itbuzzpress.chapter2.wsdemo -DartifactId=client-demo-wsdl -Dversion=1.0 -Dpackage=com.itbuzzpress.chapter2.wsdemo -Dversion=1.0 -Darchetype.interactive=false --batch-mode

由于您的客户端需要引用端点接口和存根,因此需要提供它们或者从服务器项目复制它们,或者使用wsconsume再次生成它们:

$ wsconsume.bat -k CustomerService.wsdl -o client-demo-wsdl\src\main\java

现在包括一个最小的Client Test应用程序,它是JUnit测试用例的一部分:

public class AppTest extends TestCase {public void testApp()  {CustomerService service = new CustomerService();Customer port = service.getCustomerPort();CustomerRecord record = port.locateCustomer("John", "Li", new USAddress());	System.out.println("Customer record is " +record);assertNotNull(record);}
}

编译并运行测试

为了成功运行WS客户端应用程序,需要正确设置类加载器以包括所需的JAX-WS实现库(以及所需的传递依赖项(如果有))。 根据客户端要在其中运行的环境,这可能意味着向类路径中添加了一些jar,或者向Maven依赖关系树中添加了一些工件依赖关系,正确设置了IDE等。

由于Maven用于构建包含客户端的应用程序,因此您可以按以下方式配置pom.xml ,使其包含对JBossWS的依赖关系:

<dependency><groupId>org.jboss.ws.cxf</groupId>  <artifactId>jbossws-cxf-client</artifactId>  <version>4.2.3.Final</version><scope>provided</scope>
</dependency>

现在,您可以执行测试用例,该用例将调用JAX-WS API以使用JBossWS服务客户端调用。

mvn clean package test

专注于客户端使用的JAX-WS实现

通过在应用程序类加载器中查找META-INF / services / javax.xml.ws.spi.Provider资源,可以在运行时选择要用于运行JAX-WS客户端的JAX-WS实现。 每个JAX-WS实现都有一个包含该资源文件的库(jar),该资源文件在内部引用实现JAX-WS SPI提供程序的适当类。

在WildFly 8.0.0.Final应用程序服务器上,JAX-WS实现包含在文件jbossws-cxf-factories-4.2.3.FinalMETA-INF / services / javax.xml.ws.spi.Provider中:

org.jboss.wsf.stack.cxf.client.ProviderImpl

因此,控制构建应用程序类加载器的类路径中包含哪些工件或jar库非常重要。 如果找到多个实现,则顺序很重要,因此将使用类路径中的第一个实现。

避免任何类路径问题(从而加载另一个JAX-WS实现)的最安全方法是将java.endorsed.dirs系统属性设置为包含jbossws-cxf-factories.jar; 如果不这样做,请确保没有在类路径之前包含其他META-INF / services / javax.xml.ws.spi.Provider资源,这将触发另一个JAX-WS实现。

最后,如果JAX-WS客户端打算作为JavaEE应用程序的一部分在WildFly上运行,则JBossWS JAX-WS实现将自动选择为客户端提供服务。

http://www.itbuzzpress.com/ 该摘录摘自“ Advanced JAX-WS Web Services ”一书,在该书中,您将学习基于SOAP的Web服务体系结构的概念,并获得有关在企业中构建和部署Web服务的实用建议。

本书从建立开发环境的基础知识和最佳实践入手,以清晰简洁的方式介绍了JAX-WS的内部细节。

您还将了解可用于创建,编译和测试SOAP Web服务的主要工具包,以及如何解决常见的问题,例如调试数据和保护其内容。

您将从这本书中学到什么:

  • 使用SOAP Web服务迈出第一步。 安装开发和测试应用程序所需的工具。
  • 使用自上而下和自下而上的方法开发Web服务。
  • 使用Maven原型来加速Web服务的创建。
  • 深入探讨JAX-WS类型的细节:Java到XML的映射以及XML到Java的映射
  • 在WildFly 8和Tomcat上开发SOAP Web服务。 在WildFly上运行本机Apache CXF。
  • 保护Web服务。 将身份验证策略应用于您的服务。 加密通信。

翻译自: https://www.javacodegeeks.com/2014/09/developing-a-top-down-web-service-project.html

orcad自上而下

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

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

相关文章

安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...

开机启动项是每台电脑都有的东西&#xff0c;就是多和少的问题的&#xff0c;很多人开机的时候喜欢加载很多的启动项&#xff0c;其实这也没什么不好的。现在的电脑为了受到更好的保护&#xff0c;往往在开机的时候就加载了一些启动项&#xff0c;如&#xff1a;杀毒软件&#…

4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)

用指针访问数组元素[1]数组是一组连续存储的同类型数据&#xff0c;可以通过指针的算术运算&#xff0c;使指针依次指向数组的各个元素&#xff0c;进而可以遍历数组。定义指向数组元素的指针定义与赋值例&#xff1a;int a[10], *pa; pa&a[0]; 或 paa;等效的形式经过上述定…

属性面板 脚本_3.1 创建和使用脚本

在unity中&#xff0c;游戏物体的行为是通过组件来驱动的&#xff0c;我们可以通过内建的组件来给我们的游戏物体组合各种能力&#xff0c;尽管如此&#xff0c;要知道我们的需求永远是动态的&#xff0c;很快我们就会发现&#xff0c;内建的组件功能已经无法满足我们的需求&am…

vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...

问题&#xff1a;在本地使用了proxyTable代理可以正常跨域请求后台数据&#xff0c;打包上传后就无法获得后台的json文件。查看了相关资料可以用nginx进行解决。还可以使用命名环境变量&#xff0c;请求的时候进行判断&#xff0c;话不多说上干货module.exports merge(prodEnv…

tomee_使用Vysper,TomEE和PrimeFaces将XMPP服务器嵌入JSF Web应用程序内部

tomee我有一个需要在完成某些工作时通知用户的应用程序。 它使用JSF和Primefaces&#xff0c;因此可以使用大气 &#xff08;也称为Push&#xff09;来实现这种通知。 但是另一个有趣的方法是使用嵌入在Java Web应用程序中的XMPP服务器。 好的&#xff0c;好的&#xff0c;您不…

板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!

对于一些比较复杂的结构&#xff0c;Altium的处理能力有限&#xff0c;通常采用AutoCAD来进行设计&#xff0c;然后在Altium中执行菜单栏中“文件”→“导入”→DWG/DXF命令&#xff0c;选择需要导入的DXF文件即可。如果导入过程中出现了乱码&#xff0c;报错等问题要如何解决呢…

您如何使用硒来计算自动化测试的投资回报率?

跨浏览器测试是一种测试&#xff0c;需要大量的精力和时间。 通过不同的浏览器&#xff0c;操作系统&#xff0c;设备&#xff0c;屏幕分辨率测试Web应用程序&#xff0c;以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selenium进行的自动跨浏览…

流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等

概述对于一些有并发要求的业务&#xff0c;特别是对接外部流量时&#xff0c;产品上线前一定要做的就是压力测试&#xff0c;但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例&#xff0c;这些通过模拟请求的压测工具&#xff0c;只能发送特定的…

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历

C语言天才&#xff01;想法奇异&#xff1f;还是逼格满满&#xff1f;一份国外C语言写的传奇简历作者用代码更新了自己的简历&#xff0c;是不是很接地气&#xff0c;特符合程序员的逼格。这是一份可读可执行的语言源文件&#xff0c;也是作者编码风格的体现。C语言源码&#x…

hash值 更改git_Git切换版本

Git切换版本有三种方式&#xff1a;1.基于哈希值切换》基于哈希值切换(推荐)&#xff0c;命令&#xff1a;git reset --hard 哈希值&#xff0c;哈希值从哪来&#xff0c;git reflog查看下就知道了&#xff0c;切换版本后&#xff0c;git reflog会发现有两个HEAD&#xff0c;别…

fedora mysql_Fedora server 安装Mysql8

导读MySQL是一种关系数据库管理系统(RDBMS)&#xff0c;作为服务器运行&#xff0c;提供对多个数据库的多用户访问。 这是指导&#xff0c;如何在Fedora 28/27/26&#xff0c;CentOS 7.5 / 6.10和Red Hat(RHEL)7.5 / 6.10上安装或升级MySQL社区服务器最新版本8.0(8.0.12)/5.7(5…

lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

lombok 生成代码对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此&#xff0c;该类只需要存储一些值就可以。 您需要这些值的getter和setter方法&#xff0c;也许您还需要一个构造函数&#xff0c;覆盖equals&#xff08;&#xff09;和 hash…

让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器

前言缘是美丽的邂逅&#xff0c;爱是心跳的感觉&#xff0c;情是心灵的交会&#xff0c;恋是甜蜜的思念&#xff0c;走在爱与被爱的边缘&#xff0c;你见或者不见&#xff0c;爱你的心始终不改变&#xff01;C语言诠释爱——为TA写下心中情&#xff0c;生成程序传给TA&#xff…

Java十六进制浮点文字

我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能&#xff0c;以减少代码重新格式化的可能性。 如果重新格式化&#xff0c;当前版本的代码将覆盖原本相同的代码。 这很烦人&#xff0c;因为按下重新格式化键的快捷键相当容易&#xff0c;而且许多项目甚至要求开发…

C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例

C语言对自己电脑做的事儿啊&#xff0c;总有那么一丝恐怖&#xff0c;C语言与电脑两例开场先抱歉&#xff0c;偷懒好多天了。今天分享给大家的l两例比较短小精悍&#xff0c;都是针对于计算机屏幕处理的两例&#xff0c;有兴趣的可以放到自己电脑上运行哦。绝对无害&#xff0c…

servlets_jQuery Ajax – Servlets集成:构建完整的应用程序

servlets网上有很多教程&#xff0c;它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识&#xff0c;但是&#xff0c;我从未找到对于初学者来说足够简洁的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程&#xff0c;包括前端&#xff0c;后端&…

mysql分库分表的缺点_MySQL分库分表会带来哪些问题?

分库分表能有效的环节单机和单库带来的性能瓶颈和压力&#xff0c;突破网络IO、硬件资源、连接数的瓶颈&#xff0c;同时也带来了一些问题。下面将描述这些技术挑战以及对应的解决思路。1、事务一致性问题分布式事务当更新内容同时分布在不同库中&#xff0c;不可避免会带来跨库…

C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言这些问题测试了C语言的高级知识&#xff0c;包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为&#xff0c;递归和指针算术等概念有深入的理解&#xff0c;但是这些故意复杂的例子并不代表现实世界的代码&#xff0c;当然也不会为了清晰和可维护性而获得任何奖励…

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标&#xff0c;并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始&#xff0c;…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵&#xff0c;不知什么意思&#xff0c;但是&#xff0c;你老师说&#xff1a;”就得那么写“&#xff0c;你照做&#xff0c;但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑&#xff0c;新手可阅&#xff0c;老鸟绕道。代码…