gpt4 book ai didi

java - 如何测试需要 SOAP 头的 Spring-WS Web 服务?

转载 作者:行者123 更新时间:2023-11-30 04:59:44 25 4
gpt4 key购买 nike

我已经实现了一个 spring-ws (2.0.2) 服务,它需要肥皂头中的一些自定义元素。我正在尝试使用 Spring 的 MockWebServiceClient 生成有效的请求来测试调度程序、编码器等。

我遇到的问题是 MockWebSerivce 似乎只支持 Soap Body(有效负载)。

如何访问正在生成的肥皂请求以将正确的 header 放入其中?

如果除了 Spring 的 MockWebServiceClient 之外还有更好的库可以完成此操作,那也很好。

相关链接: http://forum.springsource.org/showthread.php?101708-MockWebServiceClient-amp-WS-Security
Add SoapHeader to org.springframework.ws.WebServiceMessage

最佳答案

当我想使用安全性测试 Spring Web 服务时,我遇到了类似的问题,我最终使用 Spring 拦截器在到达终点之前修改 header ,我启用拦截器仅用于测试。

创建一个拦截器,我实现了SmartEndpointInterceptor,您可以选择使用其他拦截器

public class ModifySoapHeaderInterceptor implements
SmartEndpointInterceptor
{
//WSConstants.WSSE_NS;
private static final String DEFAULT_SECURITY_URL = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
private static final String SECURITY_TAG = "Security";
private static final String SECURITY_PREFIX = "wsse";
private static final String USER_NAME_TOKEN = "UsernameToken";

@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception
{
SaajSoapMessage saajSoapMessage(SaajSoapMessage)messageContext.getRequest());
SOAPHeader soapHeader = saajSoapMessage.getSaajMessage().getSOAPPart()
.getEnvelope().getHeader();

//you can modify header's as you choose
Name headerElement = saajSoapMessage.getSaajMessage().getSOAPPart()
.getEnvelope()
.createName(SECURITY_TAG, SECURITY_PREFIX, DEFAULT_SECURITY_URL);
SOAPHeaderElement soapHeaderElement = soapHeader
.addHeaderElement(headerElement);
SOAPElement usernameToken = soapHeaderElement.addChildElement(
USER_NAME_TOKEN, SECURITY_PREFIX);

SOAPElement userNameElement = usernameToken.addChildElement("Username",
SECURITY_PREFIX);
userNameElement.addTextNode("userid");//you can inject via spring

SOAPElement passwordElement = usernameToken.addChildElement("Password",
SECURITY_PREFIX);
passwordElement.addTextNode("password");
return true;
}
}

在 spring 上下文中配置此拦截器

  <sws:interceptors>
<bean class="prasanna.ws.security.wss4j.ModifySoapHeaderInterceptor"/>
</sws:interceptors>

这会在消息到达终点之前向消息添加必要的安全 header ,您仍然可以使用 MockWebServiceClient 来测试您的 Web 服务。

关于java - 如何测试需要 SOAP 头的 Spring-WS Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251060/

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