2013-04-10 68 views
0

我已經按如下方式創建CXF JAXWS服務。無法以安全方式調用Web服務

我提供了一個自定義的UserNameToken驗證器和回調處理程序。

但是,這是行不通的。它每次都會拋出一個錯誤。

<http:inbound-endpoint address="http://localhost:8080/HelloService" exchange-pattern="request-response"> 
    <cxf:jaxws-service serviceClass="com.example.service.HelloServiceImpl" > 
    <cxf:ws-security> 
    <cxf:ws-config>      
    <cxf:property key="action" value="UsernameToken" /> 
    </cxf:ws-config> 
    <cxf:ws-custom-validator >     
     <cxf:username-token-validator ref="customUsernameTokenValidator" /> 
    </cxf:ws-custom-validator>     
     </cxf:ws-security> 
    <cxf:properties> 
      <spring:entry key="ws-security.ut.validator" value-ref="customUsernameTokenValidator" ></spring:entry> 
      <spring:entry key="ws-security.callback-handler" value-ref="myPasswordCallback" ></spring:entry> 
     </cxf:properties> 
     ..... 
     ..... 

而且如下

 <sp:SupportingTokens> 
      <wsp:Policy> 
       <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
        <wsp:Policy /> 
       </sp:UsernameToken> 
      </wsp:Policy> 
     </sp:SupportingTokens> 

我WSDL政策結合我得到下面的錯誤,當我火我從SOAPUI與用戶名令牌和密碼請求。

2013-04-10 11:08:13,811 WARN [qtp1221956599-40 - /HelloService] logging.LogUtils (LogUtils.java:384) - Interceptor for {http://example.org/HelloService}ProductSOAPService#{http://example.org/HelloService}addCompany has thrown exception, unwinding now 
    org.apache.cxf.interceptor.Fault 
     at org.mule.module.cxf.MuleInvoker.invoke(MuleInvoker.java:106) 
     at org.mule.module.cxf.MuleJAXWSInvoker.invoke(MuleJAXWSInvoker.java:47) 
     at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75) 
     ..... 
     ..... 
    Caused by: java.lang.NullPointerException 
     at org.mule.module.cxf.MuleInvoker.invoke(MuleInvoker.java:60) 
     ... 29 more 

請幫我理解我在這裏錯過了什麼。

注意:我已經嘗試了使用cxf:ws-security在jaxws上實現安全性的Mule方式,並且我的服務正在工作並給出了適當的響應。

回答

1

您的cxf jaxws服務應該如下。那麼它應該工作。

<http:inbound-endpoint address="http://localhost:8080/HelloService" exchange-pattern="request-response"> 
<cxf:jaxws-service serviceClass="com.example.service.HelloServiceImpl" > 
<cxf:properties> 
     <spring:entry key="ws-security.ut.validator" value-ref="customUsernameTokenValidator" ></spring:entry> 
     <spring:entry key="ws-security.callback-handler" value-ref="myPasswordCallback" ></spring:entry> 
    </cxf:properties> 
    </cxf:jaxws-service> 
+0

我解決了問題。謝謝您的幫助。 – user1760178 2013-04-14 11:56:18