3.2. Jakarta XML Web 服务端点


3.2.1. 关于 Jakarta XML Web 服务端点

Jakarta XML Web Services Web 服务端点是 Web 服务的服务器组件。客户端和其他 Web 服务使用称为简单对象访问协议(SOAP)的 XML 语言通过 HTTP 协议与其通信。端点本身部署到 JBoss EAP 容器中。

可以通过以下两种方式之一创建 WSDL 描述符:

  • 手动编写 WSDL 描述符.
  • 使用 Jakarta XML Web 服务注释,自动创建 WSDL 描述符。这是创建 WSDL 描述符的最常用方法。

端点实施带有 Jakarta XML Web Services 注释并部署到服务器。服务器会自动生成并发布 WSDL 格式的抽象合同,供客户端使用。所有 marshalling 和 unmarshalling 均委派至 Jakarta XML Binding 服务。

端点本身可能是 Plain Old Java 对象(POJO)或 Jakarta EE Web 应用。您还可以使用 Jakarta Enterprise Beans 3 无状态会话 Bean 公开端点。它打包成 Web 存档(WAR)文件。打包端点的规范在 Jakarta Web Services 元数据规范 2.1 中定义。

示例:POJO 端点

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class JSEBean {
    @WebMethod
    public String echo(String input) {
        ...
    }
}
Copy to Clipboard Toggle word wrap

示例:Web 服务端点

<web-app ...>
  <servlet>
    <servlet-name>TestService</servlet-name>
    <servlet-class>org.jboss.quickstarts.ws.jaxws.samples.jsr181pojo.JSEBean01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestService</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
Copy to Clipboard Toggle word wrap

以下 Jakarta Enterprise Beans 3 无状态会话 Bean 在远程接口上公开了相同的方法,以及端点操作。

@Stateless
@Remote(EJB3RemoteInterface.class)

@WebService

@SOAPBinding(style = SOAPBinding.Style.RPC)
public class EJB3Bean implements EJB3RemoteInterface {
    @WebMethod
    public String echo(String input) {
        ...
    }
}
Copy to Clipboard Toggle word wrap

服务端点接口

Jakarta XML Web 服务通常实施 Java 服务端点接口(SEI),它可以从 WSDL 端口类型(直接或使用注释)映射。此 SEI 提供了一个高级抽象,隐藏了 Java 对象及其 XML 表示之间的详细信息。

端点供应商接口

在某些情况下,Jakarta XML Web 服务需要能够在 XML 消息级别上操作。端点 提供程序 界面向实施它的 Web 服务提供此功能。

使用和访问端点

部署 Web 服务后,您可以使用 WSDL 创建组件存根,这是应用程序的基础。然后,您的应用可以访问端点来开展工作。

3.2.2. 开发和部署 Jakarta XML Web 服务端点

Jakarta XML Web 服务端点是一个服务器端组件,响应来自 Jakarta XML Web 服务客户端的请求,并为自身发布 WSDL 定义。

有关如何开发 Jakarta XML Web Services 端点应用程序的工作示例,请参见 JBoss EAP 附带的以下快速入门:

  • jaxws-addressing
  • jaxws-ejb
  • jaxws-pojo
  • jaxws-retail
  • wsat-simple
  • wsba-coordinator-completion-simple
  • wsba-participant-completion-simple

开发要求

Web 服务必须满足 Jakarta XML Web Services API 和 Jakarta Web Services 元数据规范 2.1 规范 的要求。

以下是满足这些要求的 Web 服务实施示例。

示例:Web 服务实施

package org.jboss.quickstarts.ws.jaxws.samples.retail.profile;

import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;

@Stateless

@WebService(
    name = "ProfileMgmt",
    targetNamespace = "http://org.jboss.ws/samples/retail/profile",
    serviceName = "ProfileMgmtService")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class ProfileMgmtBean {
    @WebMethod
    public DiscountResponse getCustomerDiscount(DiscountRequest request) {
        DiscountResponse dResponse = new DiscountResponse();
        dResponse.setCustomer(request.getCustomer());
        dResponse.setDiscount(10.00);
        return dResponse;
    }
}
Copy to Clipboard Toggle word wrap

以下是上例中 ProfileMgmtBean bean 使用的 DiscountRequest 类示例。注解包含在内。通常,Jakarta XML Binding 的默认值是正确的,不需要指定。

示例:DiscountRequest 类

package org.jboss.test.ws.jaxws.samples.retail.profile;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

import org.jboss.test.ws.jaxws.samples.retail.Customer;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
  name = "discountRequest",
  namespace="http://org.jboss.ws/samples/retail/profile",
  propOrder = { "customer" }
)
public class DiscountRequest {

   protected Customer customer;

   public DiscountRequest() {
   }

   public DiscountRequest(Customer customer) {
      this.customer = customer;
   }

   public Customer getCustomer() {
      return customer;
   }

   public void setCustomer(Customer value) {
      this.customer = value;
   }

}
Copy to Clipboard Toggle word wrap

打包部署

实施类封装在 JAR 部署中。部署所需的任何元数据都从实施类和服务端点接口的注解中获取。您可以使用管理 CLI 或管理控制台部署 JAR,并且 HTTP 端点会自动创建。

下表显示了 Jakarta Enterprise Beans Web 服务的 JAR 部署结构示例:

$ jar -tf jaxws-samples-retail.jar
org/jboss/test/ws/jaxws/samples/retail/profile/DiscountRequest.class
org/jboss/test/ws/jaxws/samples/retail/profile/DiscountResponse.class
org/jboss/test/ws/jaxws/samples/retail/profile/ObjectFactory.class
org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmt.class
org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmtBean.class
org/jboss/test/ws/jaxws/samples/retail/profile/ProfileMgmtService.class
org/jboss/test/ws/jaxws/samples/retail/profile/package-info.class
Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部