2

Apache-ODEで HelloWorld bpel プロセスをセットアップしようとしています。ode.war(1.3.5/1.3.6) をTomcat 7.0.50に入れ、ODE の Web インターフェースを使用して helloworld プロセスをデプロイしました。

私のプロセスは単にメッセージを受け取ります。次に、メッセージが別の Web サービスの名前空間に変換され、それが呼び出されます。結果は最初の名前空間に変換され、応答として使用されます。すべての wsdl ファイルと portLinkType がプロセスにパックされています。これが私のプロセスです:

<bpel:assign name="myInputInitialization">
    <bpel:copy>
        <bpel:from>
            <bpel:literal>
                <ns2:sayHi xmlns:ns2="http://samples.orchestrator.intrinsec.com/">
                    <text>NoBody</text>
                </ns2:sayHi>
            </bpel:literal>
        </bpel:from>
        <bpel:to variable="myInput" part="parameters"/>
    </bpel:copy>
</bpel:assign>
<bpel:assign name="sayHiResponseInitialization">
    <bpel:copy>
        <bpel:from>
            <bpel:literal>
                <ns2:sayHiResponse xmlns:ns2="http://samples.orchestrator.intrinsec.com/">
                    <myHelloText>
                        <text>Bye</text>
                    </myHelloText>
                </ns2:sayHiResponse>
            </bpel:literal>
        </bpel:from>
        <bpel:to variable="sayHiResponse" part="parameters"/>
    </bpel:copy>
</bpel:assign>

<bpel:assign validate="no" name="myAssignIn"> <!-- validate="yes" is not supported by ODE.  -->
    <bpel:copy>
        <bpel:from variable="sayHiRequest" part="parameters">
            <bpel:query>text</bpel:query>
        </bpel:from>
        <bpel:to variable="myInput" part="parameters">
            <bpel:query>text</bpel:query>
        </bpel:to>
    </bpel:copy>
</bpel:assign>
<bpel:invoke
    name="myInvoke"
    partnerLink="helloWorldPartnerLinkService"
    operation="sayHi"
    portType="samples:IHelloWorld"
    inputVariable="myInput"
    outputVariable="myOutput">
</bpel:invoke>
<bpel:assign validate="no" name="myAssignOut">
    <bpel:copy>
        <bpel:from variable="myOutput" part="parameters">
            <bpel:query>myHelloText/text</bpel:query>
        </bpel:from>
        <bpel:to variable="sayHiResponse" part="parameters">
            <bpel:query>myHelloText/text</bpel:query>
        </bpel:to>
    </bpel:copy>
</bpel:assign>
<bpel:reply
    name="myReply"
    partnerLink="helloWorldPartnerLinkClient"
    operation="sayHi"
    portType="bonjourlemonde:IHelloWorld"
    variable="sayHiResponse">
</bpel:reply>

これはすでに非常に長いため、wsdl-imports、partnerLinks、および変数の定義を省略しました。

実装を提供する Web サービスは、次のように定義されます。

@WebService(serviceName = "HelloWorldService", portName="HelloWorldPort")
public interface IHelloWorld
{
    @GET @Path("sayHi")
        public @WebResult(name = "myHelloText") HelloText sayHi(final @WebParam(name = "text") String text);
}

public class HelloWorld implements IHelloWorld
{
  @Override
  public HelloText sayHi(final String text)
  {
    return new HelloText((text == null)?"Hello":"Hello " + text);

  }
}

この呼び出された webService はCXFを使用したコードであり、正常に動作し、同じ Tomcat にデプロイされます (jetty Endpoint.publish で始まるスタンドアロン サーバーは同じ動作をします)。

次に、標準のwsimportツールを使用して、ODE によって公開される webService のクライアントを作成します。

この Web サービスを呼び出すと、期待どおりの結果が得られます (Hello very very George)。また、ODE インターフェイスで展開パッケージ、プロセス、およびインスタンスを確認できます。3 つの管理 Web サービスを使用して ODE にクエリを実行し、Web インターフェイスと同じ情報を取得できます。

ここまでのすべてが完璧です。

ここで、生成したクライアントをもう一度使用しています。その後、404 http エラーが発生します。BPEL プロセスで Web サービス設計をさらに呼び出すと、404 http エラーが発生しますが、Web サービス (およびクライアントの生成に使用) に対応する wsdl に到達できます。

BPEL プロセスを再度開始する唯一の方法は、Tomcat を再起動することです (または、ODE をアンデプロイし、ODE を再デプロイし、BPEL プロセスを再デプロイします)。

ODE のログ レベルを DEBUG に変更しない限り、catalina.out にエラーは表示されません (ログは質問に対して冗長すぎます)。

プロセスの最初の実行では、エラーのない約 800 行のデバッグ メッセージが表示されます。プロセスの成功は、段階を追って追跡できます。プロセスの 2 回目の実行では、次のエラーが表示されます。

15:35:20,866 DEBUG [DataRetrievalUtil] File does not exist in the Service Repository! File=META-INF/ServiceData.xml
15:35:20,866 DEBUG [AxisDataLocatorImpl] Check loading failure for file, META-INF/ServiceData.xml.Message = Failed to load from file, META-INF/ServiceData.xml
15:35:20,866 DEBUG [AxisDataLocatorImpl] Check loading failure for file, META-INF/ServiceData.xml
org.apache.axis2.dataretrieval.DataRetrievalException: Failed to load from file, META-INF/ServiceData.xml
    at org.apache.axis2.dataretrieval.DataRetrievalUtil.buildOM(DataRetrievalUtil.java:64)
    at org.apache.axis2.dataretrieval.AxisDataLocatorImpl.loadServiceData(AxisDataLocatorImpl.java:104)
    at org.apache.axis2.description.AxisService.getDefaultDataLocator(AxisService.java:2949)
...
Caused by: javax.xml.stream.XMLStreamException: File does not exist in the Service Repository! File=META-INF/ServiceData.xml
    at org.apache.axis2.dataretrieval.DataRetrievalUtil.getInputStream(DataRetrievalUtil.java:103)
...

「ServiceData.xml」エラーにより、「axis2」タグを追加するようになりました。ODE documentation/examples/UnitTests には service.xml/ServiceData.xml に関連するものは何もなく、この種のエラーをグーグルで検索しても解決策はありません。

4

1 に答える 1

1

これは、ODE によって公開される Web サービスの wsdl に関連する機能です。すべての wsdl で、サービス ポートの場所が間違っている可能性があります (URL の require 'ode/processes' 部分がありません)。これは、ODE の 3 つの組み込み管理サービスすべてにも当てはまります。wsdl は、'invoke' アクティビティを使用しているプロセスへの最初の呼び出し後に変更される可能性があります。

「wsimport」などのツールを使用してクライアント コードを生成する場合は、サービスのエンドポイント URL をオーバーライドする必要があります (2 つの「/」の間に「ode/process」を追加します)。

于 2014-02-04T19:48:56.827 に答える