我正在将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");