使用CXF/JAXB(wsdl-first)生成自定义名称空间前缀



我正在将Web服务从WebLogic迁移到JBOSS。现有客户之一使用对使用的名称空间前缀敏感的解析器,我无法影响这一点。迁移改变了一些前缀,我需要能够将它们还原。

我查看了各种选择,其中许多来自这个答案,但没有一个合适的选择。

我正在使用cxf-codegen-plugin并从WSDL生成我的来源。这似乎否认我将注释添加到我的来源的选择。

我也不将spring与cxf一起使用(因为这不是弹簧应用 jaxws:dataBinding(或者如果我有这个选项,我不明白如何配置它(。

我已经看到了至少一个基于代码的JAXB示例,该示例设置了一个邮政乐属性,但看不到如何发表声明。

我的JAXB调用已经涉及用于映射dateTime类型的自定义bindings.xml(出于与现有代码相关的遗产(,我期望与同一行相同,但我无法发掘它。

鉴于这些限制,有人知道如何做到这一点吗?

使用Soaphandler并在Web服务中指定为handlerchain

@HandlerChain(file="/handler-chain.xml")
public class WebserviceImpl {

Handler-Chain.xml (内部WEB-INF/classes(

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
    <handler-chain>
        <handler>
            <handler-name>NamespacePrefixHandler</handler-name>
            <handler-class>com.my.package.CustomHandler</handler-class>
        </handler>
    </handler-chain>
</handler-chains>

实现handleMessage()以获取肥皂并根据需要设置前缀。

final SOAPMessage soapMessage = context.getMessage();
final SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
final SOAPBody soapBody = soapMessage.getSOAPBody();
soapEnvelope.setPrefix("my");
soapEnvelope.removeNamespaceDeclaration("soap");
removeNSprefix(soapBody.getChildElements());
soapBody.setPrefix("my");

相关内容

  • 没有找到相关文章

最新更新