我正在开发安全的Web服务,并使用wsimport工具创建了客户端类。
我正在工作的Web服务只有在soap头中以下列格式接收请求时才会发送响应
<wsse:Security xmlns:wsse="http://somename.xsd">
<wsse:UsernameToken xmlns:wsu="http://somename2.xsd">
<wsse:Username>${=(com.company.xxx.util.classname.getXXX("SomeString"))}</wsse:Username>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
我的问题是${=(com.company.xxx.util.classname.getXXX("SomeString"))}
在Soap UI工具中的工作原理?
我们是否需要在soap UI中添加包含类的jar?
在java代码中如何工作?
先谢谢
拉杰什
答案 0 :(得分:0)
请注意${=(com.company.xxx.util.classname.getXXX("SomeString"))}
它不是表达式语言(用作JSP的EL ...)。这是SOAPUI在SOAP请求中使用groovy代码的特定表示法。
要在groovy
testStep或groovy
表达式中使用外部jar中的java类(就像使用${=groovy exp}
表示法在SOAP请求中那样),您可以使用在SOAPUI_HOME/bin/ext
目录中添加jar库。将库复制到该目录后,重新启动SOAPUI,以便它可以加载新库。
基于评论的编辑:
我不确定你是否真的在问这个问题,但是我给你一个可能的解释:
${=groovy exp}
符号用于SOAPUI工具,SOAPUI在发送请求之前使用groovy解析表达式并将值发送给WS。
在java中你不能使用这种表示法,而且你也不能用你的java代码发送SOAP请求:
<wsse:Security xmlns:wsse="http://somename.xsd">
<wsse:UsernameToken xmlns:wsu="http://somename2.xsd">
<wsse:Username>com.company.xxx.util.classname.getXXX("SomeString")</wsse:Username>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
因为WS会将com.company.xxx.util.classname.getXXX("SomeString")
解释为用户名&#34;字符串&#34;值。您已经评估了客户端中的com.company.xxx.util.classname.getXXX("SomeString")
表达式,并在将请求发送到WS之前更改了请求中的值,因此客户端发送的请求必须如下所示:
<wsse:Security xmlns:wsse="http://somename.xsd">
<wsse:UsernameToken xmlns:wsu="http://somename2.xsd">
<wsse:Username>someUserName</wsse:Username>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
然而,我似乎很奇怪您通常手动创建WSS headers
来生成此标题,使用了wss4j.jar
这样的框架。
希望这有帮助,