wsdl - 如何自定义 JAX-WS 生成的 WSDL?

标签 wsdl jaxb jax-ws customization

我正在通过注释类使用 JAX-WS 和 JAXB 创建 SOAP 服务。我的服务实现如下所示:

@Stateless
@Local(WSApplicationService.class)
@WebService(name = "WSApplicationService", serviceName = "WSApplicationService")
@BindingType(SOAPBinding.SOAP11HTTP_BINDING)
public class WSApplicationServiceImpl implements WSApplicationService {

  @Override
  @WebMethod
  @WebResult(name = "reference")
  public long submitApplication(@WebParam(name = "application") ApplicationSubmission application) throws SOAPException {
    ...
  }
}

询问后this question ,我了解到无法使用 JAXB 注释对输入数据指定某些限制。但是,我需要将某些字符串属性限制为模式(主要是邮政编码和电话号码)。因此,我希望自定义由上述类生成的 WSDL。但是我找不到访问 WSDL 的方法。有没有办法覆盖或自定义 JAX-WS 生成的 WSDL?

最佳答案

虽然您可以安全地自动生成 WSDL,但手动编码从 WSDL 引用的 XSD 通常是有意义的,这为您提供了从 JAXB 类生成的模式所不能提供的所有丰富的表达,并且还确保当您不希望它改变时,模式不会改变。 (这种做法称为 contract-first ,而从类开始称为代码优先。)

当您执行契约优先时,您可以在构建过程中从 XSD 自动生成 JAXB 类,确保它们始终同步。您可以使用 XJB 自定义生成的类文件。

如果您使用 Maven,生成的类可能如下所示:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.7.5</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <schemaDirectory>src/main/resources/wsdl</schemaDirectory>
        <schemaIncludes>
            <include>*.xsd</include>
        </schemaIncludes>
        <verbose>true</verbose>
        <extension>true</extension>
    </configuration>
</plugin>

当然,您也可以使用带有手动编码模式定义的手动编码类(通过告诉编码器在哪里可以找到它)。我认为您无法通过其他方式影响 WSDL 的生成。

关于wsdl - 如何自定义 JAX-WS 生成的 WSDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661199/

相关文章:

php - 与 SecureNet 支付网关集成

java - 可以使用 JAXB(或 JAXB + StAX)编码 XML 的一部分吗?

java - 使用 Jaxb API 将 XML 解码为 Java 对象时获取 NullPointerException

java - 为什么 wsimport 在处理具有 @XmlRootElement 注释的服务器对象时遇到问题?

google-app-engine - 在实现 SOAP Web 服务的 servlet 中返回 wsdl

java - 请求 POJO AXIS2 Web 服务的参数未传递给 POJO

c# - xsd :decimal in WSDL 的限制

php - 无法将 Php 应用程序与 SharePoint 连接

java - JAXB 从 java 生成 nillable = "true"

java - 如何保护 Web 服务位置的安全?