gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:56:28 26 4
gpt4 key购买 nike

我正在通过注释类使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com