2011-10-23 7 views
0

apache cxf version 2.2.12を使用して作成されたWebサービスにUsernameTokenベースのセキュリティを追加しようとしています。WS-SecurityがCXFで動作していません - エンドポイントアドレス

アプリケーションをweblogicにデプロイすると、私は自分のWSDLにアクセスできる2つのURLを取得しています。

  1. http://localhst:8080/myapp/services/MyService?wsdl
  2. http://localhost:8080/myapp/MyService?wsdl

私はあるsoapUIクライアントとの問題を使用してWebサービスを消費しようとしています、私は2番目のURLを使用する場合は、すべてが正常に動作している、私のEJBは、など適切に注入されつつあるが、WSS4JInterceptorではありませんまったく呼ばれている。

soapUIのURLを1番目のものに変更すると、インターセプタが呼び出されていますが、サービスが注入されず、サービスオブジェクトとしてNULLが取得されています。

私は春の構成ファイルでWSS4JInterceptorを構成しました。リクエストヘッダーからユーザートークンを確認できるように、各リクエストの前にこのインターセプタを呼び出す必要があります。ここで

は私のbeans.xmlのはここ

<bean id="wss4jInConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
<property name="properties"> 
<map> 
    <entry key="action" value="UsernameToken Timestamp"/> 
    <entry key="passwordType" value="PasswordText" /> 
    <entry> 
     <key> 
     <value>passwordCallbackRef</value> 
     </key> 
     <ref bean="passwordCallback"/> 
    </entry> 
</map> 
</property> 
</bean> 

<bean id="passwordCallback" class="my.interceptors.callbacks.handlers.PasswordCallbackHandler"/> 

<jaxws:endpoint id="myservice" implementor="my.sample.application.MyServiceImpl" 
address="/MyService"> 
    <jaxws:ininterceptors> 
     <ref bean="wss4jInConfiguration" /> 
    </jaxws:ininterceptors> 
</jaxws:endpoint> 

である私は現在、私のWSDLへのアクセスが、ここでのタグのように見えるではありません、私のweb.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
    <context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
    classpath:WEB-INF/beans.xml 
</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <display-name>CXF Servlet</display-name> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>CXFServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

です。

<soap:address location="http://localhost:8080/MyServiceSoapPort" /> 

私は間違っています。

注:私のサービスは/サービス/

答えて

0

せずにバックURLの呼び出しなしで正常に動作している私の推測では、あなたのbeans.xmlファイルに、一度によって構成されたとして、Webサービスが実際にCXFで1回、2回展開されていることですJava EE 5 WebサービスとしてのWeblogic CXFは注入を実行しません(あなたは@EJBを使用していると仮定します).WebLogicはあなたのWS-Security設定について何も知らない。

関連する問題