gpt4 book ai didi

spring - 向 SOAP 消息添加 header 元素

转载 作者:行者123 更新时间:2023-12-02 02:08:16 24 4
gpt4 key购买 nike

我正在尝试寻找一种方法来将 header 元素添加到 SOAP 消息中。如果我使用 @WebParamheader设置为 true然后它工作正常,该参数很好地在 <soap:header> 中.但是,这需要向我的 API 添加一堆参数,这几乎不是一个选项。

乍一看, View 拦截器似乎是不可能的,所以我查看了 SOAPHandlers,但很难找到关于它的明确信息。

这是我的 Spring 配置:

<bean id="testWebservice" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean" >
<property name="serviceInterface" value="com...TestWebService"/>
<property name="wsdlDocumentUrl" value="http://localhost:9062/test-ws/remoting/test?wsdl"/>
<property name="serviceName" value="TestWebService"/>
<property name="namespaceUri" value="http://test.com"/>
<property name="portName" value="TestServicePort"/>
<property name="lookupServiceOnStartup" value="false"/>
<property name="handlerResolver" ref="myResolver"/>
</bean>

<bean id="myResolver" class="com...TestHandlerResolver" />

我的处理程序(链接在 TestHandlerResolver 中):

public class TestHandler implements SOAPHandler<SOAPMessageContext> {

@Override
public void close(MessageContext context) {
}

@Override
public Set<QName> getHeaders() {
return null;
}

@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}

@Override
public boolean handleMessage(SOAPMessageContext context) {
if (Boolean.TRUE.equals(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {

try {
List<Header> headers = new ArrayList<Header>();
Header dummyHeader;
dummyHeader = new Header(new QName("dummy"), "decapitated", new JAXBDataBinding(String.class));
headers.add(dummyHeader);
context.put(Header.HEADER_LIST, headers);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return true;
}
}

问题是我有点不知所措。使用处理程序是执行此操作的正确方法吗?如果是这样,您能否提供或指出一个很好的示例?有没有办法用拦截器来做到这一点?还是我完全是这里的目标...

最佳答案

让它像这样工作:

     @Override
public boolean handleMessage(SOAPMessageContext context) {

try {
SOAPMessage msg = context.getMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();

SOAPHeader header = envelope.getHeader();

if (Boolean.TRUE.equals(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {
if (header == null) {
header = envelope.addHeader();
}
this.addToHeader(envelope, header, "MessageID", UUID.randomUUID().toString());
...
} else {
if (header != null) {
Iterator<?> i = header.getChildElements();
while (i.hasNext()) {
SOAPElement el = (SOAPElement) i.next();
String tagName = el.getLocalName();
String value = el.getValue();
...
}
}

}
} catch (Exception e) {
...

}
return true;
}

private void addToHeader(SOAPEnvelope envelope, SOAPHeader header, String key, String value) throws SOAPException {
Name qname = envelope.createName(key, "ns1", "http://ecom.bnpp.com");
SOAPHeaderElement element = header.addHeaderElement(qname);
element.addTextNode(value);
}

关于spring - 向 SOAP 消息添加 header 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933076/

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