当前位置: 首页 > 知识库问答 >
问题:

Camel cxf: cxfEndpoint Producer错误:找不到带有操作名称的BindingoperationInfo

宇文俊风
2023-03-14

我正在使用camel-cxf:cxfEndpoint调用soap服务,但得到这个BindingOperationInfo错误。配置在我看来是正确的,但不确定哪里做错了。

endpoint配置:

<!--  Soap Client -->
<cxf:cxfEndpoint id="accountEndpoint" address="http://localhost:3333/wspoc/user"
        wsdlURL="/wsdl/userSvc.wsdl"
        serviceClass="com.cog.poc.acct.HelloWorldImplService"
        endpointName="ws:HelloWorldImplPort"
        serviceName="ws:HelloWorldImplService" 
    xmlns:ws="http://acct.poc.cog.com/" loggingFeatureEnabled="true">
    <cxf:properties>
        <entry key="dataFormat" value="POJO"/>
    </cxf:properties>
</cxf:cxfEndpoint>

我的Java DSL路由器配置。

from("direct:invokeMyUpdate")
        .bean("myAcctSvcClient", "buildSoapReq")
        .setHeader(CxfConstants.OPERATION_NAME, constant("getAccountInfo"))
        .to("cxf:bean:accountEndpoint")

WSDL元素:

<definitions targetNamespace="http://acct.poc.cog.com/"
name="HelloWorldImplService" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://acct.poc.cog.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">


<service name="HelloWorldImplService">
    <port name="HelloWorldImplPort" binding="tns:HelloWorldImplPortBinding">
        <soap:address location="http://localhost:3333/wspoc/user" />
    </port>
</service>

 <binding name="HelloWorldImplPortBinding" type="tns:HelloWorld">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
        style="rpc" />
    <operation name="getHelloWorldAsString">
        <soap:operation soapAction="" />
        <input>
            <soap:body use="literal" namespace="http://acct.poc.cog.com/" />
        </input>
        <output>
            <soap:body use="literal" namespace="http://acct.poc.cog.com/" />
        </output>
    </operation>
    <operation name="getAccountInfo">
        <soap:operation soapAction="" />
        <input>
            <soap:body use="literal" namespace="http://acct.poc.cog.com/" />
        </input>
        <output>
            <soap:body use="literal" namespace="http://acct.poc.cog.com/" />
        </output>
    </operation>
</binding>

以下是错误:

堆栈跟踪:java.lang.IllegalArgumentException:找不到具有操作名称{http://acct.poc.cog.com/}getAccount tInfo的BindingoperationInfo。请检查操作名称和操作名称空间的消息头。在org.apache.camel.component.cxf.CxfProducer.getBindingoperationInfo(CxfProducer.java:379)[camel-cxf-2.16.0.jar: 2.16.0]在org.apache.camel.component.cxf.CxfProducer.prepareBindingAction(CxfProducer.java:211)[camel-cxf-2.16.0.jar: 2.16.0]在org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:110)[camel-cxf-2.16.0.jar: 2.16.0]在org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)[camel-core-2.16.0.jar: 2.16.0]

共有1个答案

邢焕
2023-03-14

您是否也尝试设置:

<setHeader headerName="operationNamespace">
  <constant>http://acct.poc.cog.com/</constant>
</setHeader>

在JAVA DSL中,我想:

from("direct:invokeMyUpdate")
    .bean("myAcctSvcClient", "buildSoapReq")
    .setHeader(CxfConstants.OPERATION_NAME, constant("getAccountInfo"))
    .setHeader(CxfConstants.OPERATION_NAMESPACE, constant("http://acct.poc.cog.com/"))
    .to("cxf:bean:accountEndpoint")

我的第二个技巧是运行调试器并将断点放在行CxfProducer.java:379上。然后检查CxfProducer.client.conduitSelector.endpoint.binding.bindingInfo.operations的值。
我正在尝试解决类似的问题,其中从wsdl加载的操作集是空白的。

编辑:我找到了问题的根源,为什么创建的endpoint是org类型的。阿帕奇。cxf。endpoint。EndpointImpl而不是org。阿帕奇。cxf。jaxws。支持JaxWsEndpointImpl,没有操作信息。CxfEndpoint示例:

<cxf:cxfEndpoint
        id="id"
        ...
        serviceClass="service.class.name"
 >

我声明了服务。班错误地将名称命名为webservice客户端类,而不是webservice接口类。

 类似资料:
  • 我是angular 2和typescript的新手,正在尝试为我的弹出窗口调用RocketLaunch函数。 如果我在弹出窗口外声明它不调用,但如果我在弹出窗口内移动它抛出此错误: 错误TS2304:找不到名称“$event” 提供以下相关代码和错误:

  • 问题内容: 我开始使用TypeScript编写AngularJS应用。我有这个简单的模块命令: 当我跑步时,我得到了: 我是否需要包括一些内容以使他们理解? 问候, 问题答案: 您可以通过告诉编译器“您对角度的全部了解”来简单地告诉编译器不再担心: 为了获得所有好的工具和类型检查,您需要提取Angular类型定义,以便编译器知道可用的东西。 如果您对自己喜欢的IDE使用Visual Studio或

  • 当我试图运行angular2-express应用程序“NPM运行开发”时,我得到了“找不到名称‘promise’错误” 以下是几个文件的内容 package.json json

  • 基本上,当我调用google analytics api获取核心报告数据时,我会收到下面的错误。它在我的本地主机服务器上工作,但当我试图部署应用程序时,它失败了。请建议如何在Angular2+中导入“GAPI”变量。多谢! 我在angular应用程序中就是这样称呼它的。 gapi.auth.authorize(authData,(res:any)=>{}) tsconfig.json

  • 我试图启动并运行我的第一个TypeScript和DefinitelyTyped Node.js应用程序,但遇到了一些错误。 当我尝试传输一个简单的TypeScript node.js页面时,我收到错误“TS2304:无法找到名称'require'”。我已经阅读了其他几次发生在Stack ;溢出上的此错误,我认为我没有类似的问题。我正在shell提示符下运行命令: 该文件的内容为: 在行上抛出错误。