我可以在soap标头中使用java Expression Language吗?

时间:2015-03-17 07:25:00

标签: java soap el soapui

我正在开发安全的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代码中如何工作?

先谢谢

拉​​杰什

1 个答案:

答案 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这样的框架。

希望这有帮助,