【问题标题】:404 error of BPEL WebService at the second run第二次运行BPEL WebService的404错误
【发布时间】:2014-02-27 04:46:09
【问题描述】:

我正在尝试使用 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 和变量的定义,因为这已经很长了。

提供实现的网络服务由以下人员定义:

@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 创建一个客户端。

调用这个网络服务给我预期的结果(你好非常非常乔治)。我还可以在ODE界面中看到部署包、流程和实例。我可以使用 3 个管理 Web 服务查询 ODE,并获得与 Web 界面中相同的信息。

在这里之前的一切都是完美的。

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

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

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

流程的第一次运行大约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 相关的内容,并且在谷歌上搜索此类错误并没有提供任何解决方案。

【问题讨论】:

    标签: java jax-ws axis2 bpel apache-ode


    【解决方案1】:

    这是一个与 ODE 公开的 Web 服务的 wsdl 相关的功能。 在所有 wsdl 中,服务端口位置可能是错误的(缺少 url 的 require 'ode/processes' 部分。)。对于 ODE 的所有 3 个嵌入式管理服务也是如此。在第一次调用使用“调用”活动的进程后,wsdl 可能会发生变化。

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

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      相关资源
      最近更新 更多