2 Replies Latest reply: Nov 19, 2012 6:36 AM by 935661 RSS

    Javaアプリケーションから BPMIdentityService を利用する方法

    935661
      こんにちは

      BPMIdentityService インスタンス取得時に「コンポーネント監査を初期化できません。」とのメッセージが発生しており、BPMIdentityService のメソッド実行時に operation= null となりエラーが発生する状況に遭遇しています。サンプルは WebLogic ではなく Java アプリケーションとして実行しています。

      # 将来的には WebLogicではないAPサーバと通信させようと思っています。

      クライアントログを見る限りでは jps-config.xml を適切な記載で用意すればよいとは思っていますが、そもそもこの構成だとjps-config.xmlが必要なのかどうかを知りたい事。用意するにしてもjps-config.xmlをどのように記載すればよいのかがわからなかったのでこちらに書かせてもらいました。若しくはWSMによって制約ある事は認識しているのでこれを解除する方法でも解決できるかと思っていますがその方法も勉強不足でわかっておりません。

      下記にソースコードの一部を載せます。マニュアル等は以下を参考にしています。

      33 カスタム・ワークリスト・クライアントの作成
      <http://docs.oracle.com/cd/E28389_01/dev.1111/b56238/bp_worklistcust.htm>
      JavaDoc:WorkflowServiceClientFactory
      <http://docs.oracle.com/cd/E23943_01/apirefs.1111/e25378/oracle/bpel/services/workflow/client/WorkflowServiceClientFactory.html>

      サンプルコート
           String serverURL = "http://soabpm-vm:7001";
           String userID = "weblogic";
           String password = "welcome1";
           String realName = "myrealm";

           Map<CONNECTION_PROPERTY, String> properties = new HashMap<CONNECTION_PROPERTY, String>();
           properties.put(CONNECTION_PROPERTY.CLIENT_TYPE, WorkflowServiceClientFactory.SOAP_CLIENT);
           properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT, serverURL);
           BPMIdentityService serviceClient = WorkflowServiceClientFactory.getSOAPIdentityServiceClient(realName, properties, logger );
           serviceClient.authenticateUser(userID, password.toCharArray());
           System.out.println("RealmName=" + serviceClient.getConfiguration().toString());
      クライアント側ログ
      BPMIdentityServiceClient: Soap Request to end point=http://soabpm-vm:7001/integration/services/IdentityService/identity
           Soap Request Message: <env:Body xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
      <authenticationRequest xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">
      <userName xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">weblogic</userName>
      <password xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">welcome1</password>
      </authenticationRequest>
      </env:Body>

      IdentityServiceSOAPClient:createDispatch:
      getWsdlUrl()=http://soabpm-vm:7001/integration/services/IdentityService/identity?WSDL
      getServiceQName()={http://xmlns.oracle.com/bpel/services/IdentityService}IdentityService
      getPortQName()={http://xmlns.oracle.com/bpel/services/IdentityService}IdentityServicePort
      WorkflowServiceClientContext: getService(): Returning new javax.xml.ws.Service for identityService
      BPMIdentityServiceClient:createDispatch. Dynamic Mode. Service is created. service is oracle.j2ee.ws.common.jaxws.ServiceDelegateImpl dispatch=oracle.j2ee.ws.client.jaxws.OracleDispatchImpl
      SOAPDispatch::dispatchWithLocalPolicy, policy =
      <port-info> <policy-references> <policy-reference enabled="true" category="security" uri="oracle/no_authentication_client_policy"/> </policy-references> </port-info>

      SOAPDispatcher::invoke request=
      <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><authenticationRequest xmlns="http://xmlns.oracle.com/bpel/services/IdentityService"><userName xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">weblogic</userName><password xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">welcome1</password></authenticationRequest></env:Body></env:Envelope>
      致命的: java.io.FileNotFoundException: .\config\jps-config.xml (指定されたファイルが見つかりません。)
      致命的: java.io.FileNotFoundException: .\config\jps-config.xml (指定されたファイルが見つかりません。)
      情報: WSM-09004 コンポーネント監査を初期化できません。
      致命的: java.io.FileNotFoundException: .\config\jps-config.xml (指定されたファイルが見つかりません。)
      情報: WSM-09004 コンポーネント監査を初期化できません。
      SOAPDispatcher::invoke response=
      <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><authentication xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">true</authentication></env:Body></env:Envelope>
      BPMIdentityServiceClient: Soap Request to end point=http://soabpm-vm:7001/integration/services/IdentityService/identity
           Soap Request Message: <env:Body xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
      <configurationRequest xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">
      <realmName xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">myrealm</realmName>
      </configurationRequest>
      </env:Body>

      IdentityServiceSOAPClient:createDispatch:
      getWsdlUrl()=http://soabpm-vm:7001/integration/services/IdentityService/identity?WSDL
      getServiceQName()={http://xmlns.oracle.com/bpel/services/IdentityService}IdentityService
      getPortQName()={http://xmlns.oracle.com/bpel/services/IdentityService}IdentityServicePort
      WorkflowServiceClientContext: getService(): Returning cached javax.xml.ws.Service for identityService
      BPMIdentityServiceClient:createDispatch. Dynamic Mode. Service is created. service is oracle.j2ee.ws.common.jaxws.ServiceDelegateImpl dispatch=oracle.j2ee.ws.client.jaxws.OracleDispatchImpl
      SOAPDispatch::dispatchWithLocalPolicy, policy =
      <port-info> <policy-references> <policy-reference enabled="true" category="security" uri="oracle/no_authentication_client_policy"/> </policy-references> </port-info>

      SOAPDispatcher::invoke request=
      <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><configurationRequest xmlns="http://xmlns.oracle.com/bpel/services/IdentityService"><realmName xmlns="http://xmlns.oracle.com/bpel/services/IdentityService">myrealm</realmName></configurationRequest></env:Body></env:Envelope>
      致命的: Error while invoking endpoint "http://soabpm-vm:7001/integration/services/IdentityService/identity" from client; Client side policies: [oracle/no_authentication_client_policy]
      情報: BPMIdentityServiceClient: soapFault:
      <env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
      <faultcode>env:Server</faultcode>
      <faultstring>oracle.fabric.common.FabricException: Unable to find operation: null</faultstring>
      <faultactor/>
      </env:Fault>

      BPMIdentityServiceClient: soapFault:
      <env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
      <faultcode>env:Server</faultcode>
      <faultstring>oracle.fabric.common.FabricException: Unable to find operation: null</faultstring>
      <faultactor/>
      </env:Fault>

      アイデンティティ・サービスのSOAPエラー。.
      BPMIdentityServiceでメソッドinvokeのSOAPエラーがフォルト""により発生しました。.
      SOAPメッセージが正しい形式であり、必要なすべての属性と要素を持っていることを確認してください。エラーを修正できない場合は、Oracleサポート・サービスに連絡してください。.

      致命的: アイデンティティ・サービスのSOAPエラー。.
      BPMIdentityServiceでメソッドinvokeのSOAPエラーがフォルト""により発生しました。.
      SOAPメッセージが正しい形式であり、必要なすべての属性と要素を持っていることを確認してください。エラーを修正できない場合は、Oracleサポート・サービスに連絡してください。.

      ORABPEL-10592

      アイデンティティ・サービスのSOAPエラー。.
      BPMIdentityServiceでメソッドinvokeのSOAPエラーがフォルト""により発生しました。.
      SOAPメッセージが正しい形式であり、必要なすべての属性と要素を持っていることを確認してください。エラーを修正できない場合は、Oracleサポート・サービスに連絡してください。.

           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.convertSOAPFaultException(IdentityServiceSOAPClient.java:330)
           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.invoke(IdentityServiceSOAPClient.java:282)
           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.getConfiguration(IdentityServiceSOAPClient.java:584)
           at oracle.bpel.services.identity.client.AbstractIdentityServiceClient.getConfiguration(AbstractIdentityServiceClient.java:1042)
           at oracle.bpel.services.identity.client.AbstractIdentityServiceClient.getRealmName(AbstractIdentityServiceClient.java:1068)
           at test.Sample2.main(Sample2.java:53)
      ORABPEL-10592

      アイデンティティ・サービスのSOAPエラー。.
      BPMIdentityServiceでメソッドinvokeのSOAPエラーがフォルト""により発生しました。.
      SOAPメッセージが正しい形式であり、必要なすべての属性と要素を持っていることを確認してください。エラーを修正できない場合は、Oracleサポート・サービスに連絡してください。.

           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.convertSOAPFaultException(IdentityServiceSOAPClient.java:330)
           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.invoke(IdentityServiceSOAPClient.java:282)
           at oracle.bpel.services.identity.client.IdentityServiceSOAPClient.getConfiguration(IdentityServiceSOAPClient.java:584)
           at oracle.bpel.services.identity.client.AbstractIdentityServiceClient.getConfiguration(AbstractIdentityServiceClient.java:1042)
           at oracle.bpel.services.identity.client.AbstractIdentityServiceClient.getRealmName(AbstractIdentityServiceClient.java:1068)
           at test.Sample2.main(Sample2.java:53)
      サーバ側ログ
      <Oct 30, 2012 6:41:23 PM JST> <Error> <oracle.webservices.service> <OWS-04086> <oracle.fabric.common.FabricException: Unable to find operation: null
      at oracle.fabric.common.soap.WSDLProcessingUtil.getOperation(WSDLProcessingUtil.java:451)
      at oracle.fabric.common.soap.WSDLProcessingUtil.getOperation(WSDLProcessingUtil.java:437)
      at oracle.bpel.services.workflow.common.provider.WorkflowWSProvider.processMessage(WorkflowWSProvider.java:172)
      at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:1187)
      at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:1112)
      at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:581)
      at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:233)
      at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:194)
      at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:485)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
      at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
      at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
      at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
      at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
      at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
      at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
      at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
      at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
      at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
      at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
      at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
      at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
      at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
      at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
      at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
      at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
      at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
      at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
      at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

      <Oct 30, 2012 6:41:23 PM JST> <Error> <oracle.webservices.service> <OWS-04115> <ポート{http://xmlns.oracle.com/bpel/services/IdentityService}IdentityServicePortでエラーが発生しました: oracle.fabric.common.FabricException: Unable to find operation: null。
        • 1. Re: Javaアプリケーションから BPMIdentityService を利用する方法
          A.Nishi-Oracle
          etsu60 さん、こんばんは。
          APIからSOAP/HTTPで接続し、getConfiguration()を発行したものの、例外が発生する、という事象と理解しました。

          このgetConfiguration()ですが、BPMIdentityServiceではなく、BPMIdentityConfigServiceのgetConfiguration()をご利用下さい。
          その理由は、WebサービスのオペレーションgetConnectionはBPMIdentityServiceではなく、BPMIdentityConfigServiceに存在するからです。
          以下のような感じでBPMIdentityConfigServiceのインスタンスを取得し、getConfiguration()で構成情報を取得できます。
          なお、実行時には、soa-infra-mgmt.jarが必要ですので、クラスパスに追加することをお忘れなく。
          <blockquote>
          (コード例)
          BPMIdentityConfigService BPMidcs =
          WorkflowServiceClientFactory.getSOAPIdentityConfigServiceClient(connectionProperty, logger);
          System.out.println(BPMidcs.getConfiguration("jazn.com").toString());
          ...
          (出力例)
          Configuration: realmName=jazn.com properties:{} has 1 providers:
               Provider: service=Identity providerType=JPS providerName=JpsProvider Provider properties:{IdentityServiceExtension=, jpsContextName=default}
          </blockquote>
          既に以下の文面はチェックされているかと思いますが…。
          <blockquote>
          Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド 11g リリース1 (11.1.1.6.2)
          33 カスタム・ワークリスト・クライアントの作成
          http://docs.oracle.com/cd/E28389_01/dev.1111/b56238/bp_worklistcust.htm
          すべてのワークフロー・サービスのクライアント・ライブラリは、ファクトリを介して取得できます。各サービスに使用可能なクライアントについては、表34-1「Enterprise JavaBeans、SOAPおよびJavaサポート」を参照してください。
          <u><i>BPMIdentityServiceおよびBPMIdentityConfigServiceのインスタンスは、WorkflowServiceClientFactoryでgetSOAPIdentityServiceClientメソッドおよびgetSOAPIdentityConfigServiceClientメソッドをコールして取得できます。</i></u>その他のすべてのサービスは、IWorkflowServiceClientのインスタンスを介して取得できます。</blockquote>
          こちらも既にチェックされているとは思いますが、一応念のため。
          <blockquote>Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド 11g リリース1 (11.1.1.6.2)
          34.1.1 ヒューマン・ワークフロー・サービスに対するSOAP、Enterprise JavaBeansおよびJavaサポート
          http://docs.oracle.com/cd/E28389_01/dev.1111/b56238/bp_workflow.htm#BABCFDEA</blockquote>
          あと、jps-config.xmlやjps-config-jse.xmlですが、実際のところ無くても動作はします。
          とはいえ、OPSS(Oracle Platform Security Services)に従ってアプリケーションを作成する前提になっているため、設定ファイルがないと警告メッセージがでてしまいます。可能であれば、OPSSのお作法に従ってアプリケーションを作成されることをお勧めします。
          詳細は以下のドキュメントや自習コースをご覧下さい。
          <blockquote>
          Oracle Fusion Middlewareセキュリティ・ガイド
          開発者向けのOPSS
          http://docs.oracle.com/cd/E16340_01/core.1111/b56235/underjps.htm#CIHDECJB
          Oracle® Fusion Middlewareアプリケーション・セキュリティ・ガイド
          開発者向けのOPSS(中身はほとんど同じです)
          http://docs.oracle.com/cd/E28389_01/core.1111/b56235/underjps.htm#CIHDECJB
          Oracle Platform Security Services (OPSS) 11gR1 Self-Study Series
          https://apex.oracle.com/pls/apex/f?p=44785:24:0::NO::P24_CONTENT_ID,P24_PREV_PAGE:6036,1
          </blockquote>
          • 2. Re: Javaアプリケーションから BPMIdentityService を利用する方法
            935661
            a_nishi さん

            ご返答ありがとうございます。確認が遅くなり恐縮です。

            ご指摘頂いた点を確認しましたが BPMIdentityConfigService.getConfiguration() の実行を確認する事ができました。実は、元々は BPMIdentityService.lookupUser() などのアイデンティティ・サービス関数に対応したAPI実行をしたかったのですが、ご指摘頂いた内容で同様に解決できました。
            なお、実行時には、soa-infra-mgmt.jar が必要ですので、クラスパスに追加することをお忘れなく。
            という記述がありましたが、この設定が漏れていた事が一番の原因だったようで、soa-infra-mgmt.jar を設定する事で期待していた実行が出来るようになりました。

            ただ jps-config.xml の方はまだドキュメントが読み切れていないのでこちらは確認が取れていませんが一先ずは先に進められそうなので追々把握をしていこうと思っています。

            コメントありがとうございました。