高校网站建设情况报告范文,电子书网站怎么做,WordPress文章生成图片插件,wordpress 钩子大全jboss4 java这篇博客文章涉及Web服务。 好吧#xff0c;更确切地说#xff0c;它处理JBoss上的“普通” java Web服务。 这意味着我们将创建一个没有任何其他框架#xff08;例如CXF#xff0c;Axis等#xff09;的Web服务。 JBoss它自己提供对Web服务的支持。 因此#… jboss4 java 这篇博客文章涉及Web服务。 好吧更确切地说它处理JBoss上的“普通” java Web服务。 这意味着我们将创建一个没有任何其他框架例如CXFAxis等的Web服务。 JBoss它自己提供对Web服务的支持。 因此如果您实际上是在尝试构建基本的Web服务或者只是想了解Web服务并尝试其他事情那么JBoss Web Services应该是一个很好的起点。 开始了 网络服务 让我们首先谈谈它本身的Web服务。 什么是Web服务。 人们倾向于说Web服务不仅仅是远程方法调用RMI的过程。 实际上这不仅仅与RMI有关。 Web服务是通过HTTP协议公开的端点或单个端点的集合。 为了与这些端点进行通信我们必须创建客户端以访问端点。 Web服务端点与客户端之间的这种通信的最大优点是由SOAP协议指定的该协议建立在HTTP协议有时甚至是SMTP协议的基础上。 该协议定义了在端点和客户端之间传输的数据的结构。 数据以XML格式交换。 结果Web服务被认为是与“平台/技术”无关的。 例如可以通过使用Java CXF框架或纯JBoss Web服务来实现Web服务。 可以在非Java环境中实现访问此Web服务的客户端。 Web服务技术和客户端技术可以完全不同并且由于SOAP协议依赖于XML消息格式因此它们之间仍然可以进行通信。 要使通信成功唯一需要做的就是端点和客户端都同意XML消息的外观XML文件中将包含哪种字段和内容类型以及进行哪些操作方法客户端可以在端点上调用。 这些要求由WSDL指定。 WSDL Web服务描述语言是一种基于XML的语言用于描述Web服务的端点。 它可以定义端点的HTTP地址客户端可以在此端点上执行的操作可以传递给操作的数据类型以及从端点的那些操作返回的数据类型。 它还定义了与端点通信中使用的XML消息的确切结构。 这种信息通常以wsdl扩展名存储在文件中。 这就是著名的术语“ wsdl文件”如何出现的原因。 好的关于Web服务就足够了。 实际上我可以写很多有关Web服务和SOAP协议的信息但这超出了本博客的范围。 鼓励您这样做。 互联网上有很多关于该主题的文章。 在JBoss上创建一个简单的Web服务 示例我将向您展示eclipse 3.7indigo我将使用JBoss 4.2.3.GA作为服务器。 作为项目构建工具我将使用Maven。 让我们从在Eclipse中创建最简单的Web项目开始。 它将保存Web服务实现端点。 它只是普通Web应用程序的Maven项目。 没什么特别的。 如果您不想使用Maven那也可以。 您可以使用自己喜欢的任何工具来创建简单的Web应用程序。 在本文中我将不介绍如何创建此简单项目的详细信息。 相反我将为您提供Eclipse中项目结构的屏幕快照。 Eclipse中的项目结构。 现在让我们创建Web服务。 我们将采用“ 自下而上的方法 ”。 这意味着我们将首先开发一个实现类然后再定义WSDL。 因此让我们编写一个简单的java POJO类。 我们只是假装我们的Web服务将某种汽车ID作为参数并返回该汽车的价格。 如果我们输入不存在的汽车ID则Web服务将返回相应的错误文本。 这里要注意的主要元素是CarWebService接口和CarWebServiceImpl类它们实际上实现了端点接口。 让我们从CarWebService接口开始。 这是代码 package ba.codecentric.webservice;import javax.jws.WebMethod;
import javax.jws.WebService;import ba.codecentric.webservice.model.CarResponse;WebService
public interface CarWebService {WebMethodpublic CarResponse getCarPrice(String carId);} 如您所见这是一个普通的接口定义。 这里只有两件事需要注意两个注释 WebService和WebMethod 。 这些注释属于称为JAX-WS的技术领域。 JAX-WS是关于如何创建Web服务和客户端的规范使它们能够与RPC调用进行通信并交换基于XML的消息。 Java具有自己的JAX-WS实现使我们能够使用这些简单的注释来定义Web服务端点。 您可以在此处阅读有关JAX-WS的更多信息。 在Java内部该技术处理接收和解析XML消息通常与SOAP协议交换。 这使开发人员免去了许多小时的辛苦工作因此开发人员不必花费时间编写代码来生成肥皂消息发送它然后在服务器端接收它从xml中提取信息等。所有这些就是由Java中的JAX-WS机制在内部完成。 因此当您希望在服务器上创建纯Java Web服务端点时只需创建接口即可。 用WebService批注标记接口然后将要公开的接口中的所有方法标记为远程方法带有WebMethod批注。 然后这些将成为可以在接口上调用的操作。 在我的示例中我只有一种方法但可能还有更多方法。 下一站是创建接口实现。 我们已经公开了Web服务方法端点的操作。 这些方法必须执行某些操作才能使Web服务有意义。 在Java中这非常简单。 我们将只为接口创建实现类。 我将向您展示CarWebServiceImpl的代码。 package ba.codecentric.webservice.impl;import java.util.HashMap;
import java.util.Map;import javax.jws.WebService;import ba.codecentric.webservice.CarWebService;
import ba.codecentric.webservice.model.CarResponse;WebService(endpointInterface ba.codecentric.webservice.CarWebService)
public class CarWebServiceImpl implements CarWebService {private final MapString, Integer prices new HashMapString, Integer();public CarWebServiceImpl() {prices.put(audi, Integer.valueOf(10000));prices.put(bmw, Integer.valueOf(15000));prices.put(fiat, Integer.valueOf(5000));}public CarResponse getCarPrice(String carId) {Integer price prices.get(carId);CarResponse response new CarResponse();if(price null) {response.setCarPrice(-1);response.setStatus(error: no car with id: carId);} else {response.setCarPrice(price.intValue());response.setStatus(ok);}return response;}} 再次需要注意的是特殊注释。 与界面相同但只有一个额外的参数。 它是端点接口的标准名称。 没有其他的。 在现实世界中此Web服务可能具有更复杂的代码。 它将需要某种汽车ID然后将在数据库中搜索汽车。 但是在这里我变得更加简单。 我有一张地图其中包含三种不同的汽车ID其中存储了ID的价格。 如果将现有的汽车ID传递给服务例如audibmw则将从服务器上的Web服务获得响应。 响应将包含状态消息确定和汽车价格。 如果您将不存在的汽车ID传递给服务则您会收到状态错误的响应并且还会有一个详细的字符串告诉您未找到要搜索的汽车。 在这种情况下汽车价格将设置为-1。 好。 就Web服务实现而言就是这样。 很简单不是吗 仅要做一件事。 而这一点甚至更简单。 您需要将实现类公开为Servlet。 您将在web.xml中执行此操作。 这是代码 servletservlet-namecarWebservice/servlet-nameservlet-classba.codecentric.webservice.impl.CarWebServiceImpl/servlet-class/servletservlet-mappingservlet-namecarWebservice/servlet-nameurl-pattern/ws/car/url-pattern/servlet-mapping 我们完成了。 现在我们需要打包应用程序并将其部署到JBoss。 JBoss将为您发布此端点因此您无需担心。 所以请继续。 将您的应用程序部署到JBoss。 如果您将maven用作构建工具则pom.xml应该如下所示 buildfinalnamewebservices/finalNamepluginsplugingroupidorg.apache.maven.plugins/groupIdartifactidmaven-compiler-plugin/artifactIdversion2.5.1/versionconfigurationsource1.6/sourcetarget1.6/target/configuration/plugin/plugins
/build 由于使用了注释因此将Maven编译器的源版本和目标版本设置为Java 6。 JBoss拥有自己的小型Web应用程序可让您查看当前部署的所有Web服务以及这些Web服务的所有WSDL文件的位置。 您可以从以下URL访问此小型应用程序 http// localhost8080 / jbossws / services 当然只要您的JBoss服务器名称为localhost且其http端口配置为8080。 这是我的电脑的屏幕截图清楚地表明了在此示例中部署的Web服务正在运行。 您可以单击端点的URL。 结果是您将实际看到端点的WSDL。 在该WSDL中您将看到类似import location ……的内容 。 location属性的值是完整WSDL的真实URL。 所以请继续。 同时在浏览器中打开该URL。 现在您应该看到整个WSDL端点定义可以调用的操作发送到端点并从端点接收回的消息。 我希望这可以使您更轻松地了解Web服务实际上是如何与客户端交换数据的。 客户端只是基于从Web服务获取的WSDL文件创建请求。 在该WSDL文件中客户端可以看到与端点进行通信所需的所有内容。 SOAP协议和Java的JAX-WS机制负责其余所有工作。 开发人员不必看到这些操作中的一个被调用。 创建一个简单的Web服务客户端wsconsume实用程序 为了调用此Web服务我们需要创建一个客户端。 客户端可以是一个简单的Java控制台应用程序。 如果您不想使事情复杂化它甚至不必是Web应用程序。 这意味着您可以使用main方法创建一个简单的Java类。 只需几行代码您就完成了。 我们在这里要做的第一件事是生成所谓的“存根类”。 这些类表示我们用于与Web服务通信的模型请求和响应类。 如果您还记得的话我已经创建了一个特殊的包装器类来返回Web服务响应。 但是这些存根类中不只是模型类。 在这里您还将找到实际执行远程端点调用的类以及其他一些实用程序类。 另外您还会发现将Java对象编组和解编为XML消息时所需的一些JAXB注释反之亦然。 这些存根类是基于端点的WSDL文件创建的。 如果您还记得WSDL文件则包含客户端需要的所有信息。 基于WSDL文件我们可以生成所有必需的存根类用于与Web服务通信的模型类和用于促进此通信的实用程序类。 对我们来说幸运的是JBoss有一个小的实用程序我们将使用它来生成这些类。 我们不必为这些存根类编写任何代码。 我们还可以告诉该工具立即在工作空间中生成类。 真的很酷的东西。 因此让我们试一试。 该工具称为wsconsume.bat 位于JBoss文件夹– bin中。 对于Linux用户有wsconsume.sh 。 首先我将在Eclipse中为此生成一个不同的项目。 我将其称为ws-client 。 这是一个普通的Java项目。 您可以选择File- New- Java Project并使用所有默认设置。 好。 现在我们准备创建存根类。 我们希望wsconsume实用程序将这些类立即放入Java源文件的src文件夹中。 我们还将告诉wsconsume实用程序应该用于这些类的软件包的确切名称。 我的项目位于此处 D\ JBossTests \ jbossWebServiceWorkspace \ ws-client 。 因此wsconsume utlity的命令应为D\ JBossTests \ jboss-4.2.3.GA \ bin wsconsume -v -k -p ws.client.impl -s D\ JBossTests \ jbossWebServiceWorkspace \ ws-client \ src http://127.0.0.1:8080/webservices/ws/car?wsdl 确保您正在jboss bin文件夹中执行此命令。 否则请确保路径上有wsconsume.bat文件以从任何文件夹访问该文件。 还要确保您的jboss正在运行并且您要为其尝试生成客户端的Web服务已正确部署并正在运行。 让我们解释一下我在这里使用的参数 -v详细如果有错误则显示完整的错误堆栈跟踪 -k保留/生成Java源代码 -p软件包名称。 生成的类将立即获得给定的包 -s源文件夹。 放置源文件的目录。 我在客户端项目中使用了源文件夹这很有意义。 最后我们有了端点的WSDL位置的URL。 您可以打开jboss URL http// localhost8080 / jbossws / services来查看当前已部署的所有Web服务以及所有WSDL URL。 您只需将所需的WSDL URL复制/粘贴到wsconsume实用程序的命令提示符下即可。 在我们的例子中这是我们先前创建的Web服务的位置。 现在转到eclipse并刷新新客户端项目中的src文件夹。 现在您应该具有由wsconsume实用程序生成的某些类并且它们应位于指定的程序包中。 我们现在要做的就是执行该客户端并将请求发送到Web服务。 只需再创建一个类即可。 我将其称为CarWebserviceClient 。 我将其放入单独的包装中。 此类将具有普通的java main方法。 软件包为ws.client.runner package ws.client.runner;import ws.client.impl.CarResponse;
import ws.client.impl.CarWebService;
import ws.client.impl.CarWebServiceImplService;public class CarrWebserviceClient {public static void main(String[] args) {CarWebServiceImplService service new CarWebServiceImplService();CarWebService port service.getCarWebServiceImplPort();CarResponse audiPrice port.getCarPrice(audi);System.out.println(audi price: audiPrice.getCarPrice() EUR; web service status: audiPrice.getStatus());CarResponse fordPrice port.getCarPrice(ford);System.out.println(ford price: fordPrice.getCarPrice() EUR; web service status: fordPrice.getStatus());}} 如您所见上面的代码非常简单。 您只需要实例化客户端然后获取服务的端口即可。 我们可以通过调用具有相同名称的java方法来调用Web服务操作。 只需传递您想要的参数即可。 您可以将audi bmw和fiat用作硬编码的现有值。 您也可以尝试检索一些不存在的汽车ID的价格。 我在上面的示例中尝试过。 当然不要忘了运行jboss并部署Web服务以使其工作:-) 好吧仅此而已。 这是继续进入基于SOAP的Web服务世界的一个不错的起点。 这是最基本的示例通过使用JAX-WS API并在jboss支持Web服务的帮助下实现。 参考来自JCG合作伙伴 Branislav Vidovi的JBoss上的Core Java Web Services 在极客的东西:-)博客上。 翻译自: https://www.javacodegeeks.com/2012/08/jboss-core-java-web-services.htmljboss4 java