我正在尝试使用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服务给我预期的结果(您好,非常乔治)。我还可以在ODE界面中看到部署包,流程和实例。我可以使用3个管理Web服务查询ODE,并获得与Web界面相同的信息。

直到这里的每一件事都是完美的。

现在,我第二次使用生成的客户端。然后我收到404 http错误。在我的BPEL流程中,对Web服务设计的所有进一步调用都会导致404 http错误,同时可以访问与Web服务相对应的wsdl(并用于生成客户端)。

再次启动BPEL流程的唯一方法是重新启动Tomcat(或取消部署ODE,重新部署ODE,重新部署BPEL流程)。

在catalina.out中看不到任何错误,除非我将ODE日志级别的调试级别更改为DEBUG(日志对于该问题而言过于冗长)。

该过程的第一次运行是大约800行调试消息,没有错误,并且可以成功地逐步完成过程。
该过程的第二次运行显示此错误:

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文档/示例/ UnitTests中,没有与service.xml / ServiceData.xml相关的内容,并且对此类错误进行谷歌搜索并没有找到解决之道。

最佳答案

这是与ODE公开的Web服务的wsdl有关的功能。
在所有wsdl中,服务端口位置可能是错误的(URL的require'ode / processes'部分丢失了。)。对于ODE的所有3种嵌入式管理服务也是如此。在第一次调用使用“调用”活动的进程之后,wsdl可以更改。

如果使用“ wsimport”之类的工具来生成客户端代码,则必须覆盖服务的端点url(通过在两个“ /”之间添加“ ode / process”)。

09-30 15:20
查看更多