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服务”链接:

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实现将自动选择为客户端提供服务。

该摘录摘自“ 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自上而下

orcad自上而下_开发自上而下的Web服务项目相关推荐

  1. java restful项目打包_构建入门Restful Web服务

    创建资源类 假设你已经设置了项目和构建系统,你可以创建Web服务. 通过考虑服务交互来开始这个过程. 该服务将处理GET请求/greeting,可选地使用name查询字符串中的参数.该GET请求应该返 ...

  2. Java IDE MyEclipse 使用教程:创建Web服务项目

    本教程概述了开发 JAX-WS Web 服务并将其部署到 Tomcat 服务器的过程.本教程中使用的 Web 服务是一个非常简单的计算器服务,它为调用者提供加.减.乘和除运算. 本教程需要下载 MyE ...

  3. 开发自上而下的Web服务项目

    这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节. 第一章介绍了自底向上创建Web服务端点的方法. 它允许非常快地将现有bean作 ...

  4. 以 OSGi 包的形式开发和部署 Web 服务

    简介 OSGi 是一个面向 Java 的动态模块系统.OSGi Alliance(请参见 参考资料)发布了模块系统的规范.一些受欢迎的 OSGi 容器包括 Eclipse Equinox(请参见 参考 ...

  5. 使用Spring开发Java RESTful Web服务的7个理由

    REST现在已成为开发Web服务的标准方法,涉及Java时,可以使用许多框架和库,例如JAX-RS,Restlet,Jersey,RESTEasy,Apache CFX等,但是我鼓励Java开发人员使 ...

  6. Java web 服务器 搭建_搭建一个java web服务端

    最近也是做了一个简单的java web 项目,由于以前也是没接触过,在这里记录下搭建一个web服务端的过程. 一般我们做一个服务端要么在本地自己的电脑上先安装环境,一般是windows系统,主要安装j ...

  7. nginx在windows无法停止所有服务_这5项windows服务项目很常见,关于它们的设置建议请仔细参考...

    (1) Clip loci(剪海)下载:启用剪贴簿检视器以储存信息并与远程计算机共享.如果这个务被停止,剪薄检视器将无法与远程计算共享信息.如果这个服务被停用,任何明确依存于它的务都将无法启动 补充: ...

  8. java电商项目源码_电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码...

    本篇我们根据架构图进行代码的构建.根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现.治理.配置化管理.路由负载.安全控制等优秀解决方案,使用Maven技术将框架进行模块化. ...

  9. 使用ASP.Net 3.5 的Ajax与Web服务开发实例

    本文继续介绍使用ASP.NET3.5中的AJAX环境中如何从客户端JavaScript调用Web服务方法.编写本文的目的在于让大家深刻了解基于ASP.Net3.5的Ajax和Web的服务,虽然例子比较 ...

最新文章

  1. haskell的分数运算
  2. Xml文件数据的优点
  3. Object C学习笔记13-Dictionary字典
  4. 【c++ primer读书笔记】【第2章】变量和基本类型
  5. java设计模式学习 ----- 单例模式(Singleton)
  6. 如果手里有20万是放银行吃利息还是投资比较合适?
  7. 每天一个linux命令(10):more命令
  8. Java实现获取汉字的拼音(首拼)
  9. 苹果手机以旧换新价格表_苹果支持安卓手机以旧换新;索尼公司将更名;百度网盘推出“防误删”文件恢复服务...
  10. Unity运行时输出场景物体及角色为fbx文件
  11. vue、 echarts、iview 实现大数据可视化大屏模板
  12. 信息爆炸,物质丰富,你不得不知的奥卡姆剃刀原则
  13. windows CMD命令大全及详细解释和语法
  14. python adb 实现对支付宝登录及后台监控
  15. Redis数据莫名其妙全部丢失
  16. 人工智能的隐私保护探讨
  17. mysql内存淘汰_从创建索引过程中内存变化来看SQL Server与MySQL的内存淘汰算法
  18. 布尔运算 : ^(异或运算XOR)、(与运算AND)、|(或运算OR)、 、~(非门NOT)
  19. 计算机网络基础结构;对等网的特点;网络的扩大;网络的拓扑结构;
  20. java8 无限流_Java8-无限流

热门文章

  1. jzoj1764-游戏【dp,dfs】
  2. jzoj1478-堆排序【堆】
  3. C++ __gnu_pbds(hash,可并堆,平衡树)
  4. Korney Korneevich and XOR(CF750F1/F2)
  5. 40、使用javassit操作运行时字节码文件
  6. Hadoop生态hive(五)Hive QL数据库
  7. Class类中的getEnclosing*、getDeclared*与getDeclaringClass的区别
  8. vue中路径带# vs 不带#
  9. shell文本处理工具grep
  10. matlab 的excel 对象,MATLAB 中的 COM 对象