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

Camel CXF Wsdl2java问题

归俊捷
2023-03-14

我试图通过使用Camel&cxf调用第三方SOAP web服务。以下是wsdl的摘录

<message name="setDeviceDetailsv4">
        <part name="parameters" element="tns:setDeviceDetailsv4"></part>
        <part name="gdspHeader" element="tns:gdspHeader"></part>
    </message>
    <message name="setDeviceDetailsv4Response">
        <part name="result" element="tns:setDeviceDetailsv4Response"></part>
    </message>
    <portType name="SetDeviceDetailsv4">
        <operation name="setDeviceDetailsv4" parameterOrder="parameters gdspHeader">
            <input message="tns:setDeviceDetailsv4"></input>
            <output message="tns:setDeviceDetailsv4Response"></output>
        </operation>
    </portType>
    <binding name="SetDeviceDetailsv4PortBinding" type="tns:SetDeviceDetailsv4">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
        <operation name="setDeviceDetailsv4">
            <soap:operation soapAction=""></soap:operation>
            <input>
                <soap:body use="literal" parts="parameters"></soap:body>
                <soap:header message="tns:setDeviceDetailsv4" part="gdspHeader" use="literal"></soap:header>
            </input>
            <output>
                <soap:body use="literal"></soap:body>
            </output>
        </operation>
    </binding>
    <service name="SetDeviceDetailsv4Service">
        <port name="SetDeviceDetailsv4Port" binding="tns:SetDeviceDetailsv4PortBinding">
            <soap:address location="http://localhost:${HttpDefaultPort}/GDSPWebServices/SetDeviceDetailsv4Service"></soap:address>
        </port>
    </service>

可以看到,soap主体使用了上面wsdl中提到的“parameters”部分,与TNS:SetDeviceDetailsV4相关。

 System.out.println("Invoking setDeviceDetailsv4...");
        SetDeviceDetailsv4_Type _setDeviceDetailsv4_parameters = null;
        GdspHeader _setDeviceDetailsv4_gdspHeader = null;
        SetDeviceDetailsv4Response _setDeviceDetailsv4__return = port.setDeviceDetailsv4(_setDeviceDetailsv4_parameters, _setDeviceDetailsv4_gdspHeader);
        System.out.println("setDeviceDetailsv4.result=" + _setDeviceDetailsv4__return);
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.gdsp.xxxxxxx.com/">
    <soapenv:Header>
        <ws:gdspHeader>
            <gdspCredentials>
                <userId>xxxx</userId>
                <password>xxxx</password>
            </gdspCredentials>
        </ws:gdspHeader>
    </soapenv:Header>
    <soapenv:Body>
        <ws:setDeviceDetailsv4>
            <deviceId>xxxxxx</deviceId>
            <state>x</state>
        </ws:setDeviceDetailsv4>
    </soapenv:Body>
</soapenv:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:gdspHeader xmlns:ns2="http://ws.gdsp.xxxx.com/">
            <gdspCredentials>
                <password>xxxx</password>
                <userId>xxxx</userId>
            </gdspCredentials>
        </ns2:gdspHeader>
    </soap:Header>
    <soap:Body>
        <ns1:setDeviceDetailsv4 xmlns:ns1="http://ws.gdsp.Xxxxx.com/">
            <ns2:arg0 xmlns:ns2="http://ws.gdsp.xxx.com/">
                <deviceId>xxxx</deviceId>
                <state>x</state>
            </ns2:arg0>
            <ns2:arg1 xmlns:ns2="http://ws.gdsp.xxxx.com/">
                <gdspCredentials>
                    <password>xxxx</password>
                    <userId>xxxx</userId>
                </gdspCredentials>
            </ns2:arg1>
        </ns1:setDeviceDetailsv4>
    </soap:Body>
</soap:Envelope>

下面是我的pom.xml文件的一部分

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.7</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <wsdlOptions>
                <wsdlOption>
                  <frontEnd>jaxws21</frontEnd>
                  <faultSerialVersionUID>1</faultSerialVersionUID>
                  <wsdl>src/main/resources/wsdl/extWebServices.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-client</extraarg>
                  </extraargs>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

如何使我的Camel/CXF调用与其他开发人员所做的匹配?

共有1个答案

董意蕴
2023-03-14

wsdl不能满足我的需要。我能够修改wsdl,删除“header”选项,并使用拦截器处理header部分,使用处理器处理响应和请求编组/解编组。

 类似资料:
  • 问题内容: 包括: all Spring libs, Apache Tomcat 7.0 library 在构建路径中 但它仍然给出错误: 在“ org.sprintframework.web-3.1.0.M1.jar”中,我可以看到“ org.springframework.web.context.ContextLoaderListener”。 Google上的某个人说应该包含spring.ja

  • 问题内容: 我使用非常简单的代码返回XML 但是,出现以下错误 请帮忙。谢谢 问题答案: 运行时出现NoSuchMethodError表示你使用的库版本与生成代码所针对的版本不同。 在你的情况下,Spring是元凶。在运行时检查类路径上的内容,并确保以下各项: 版本与编译时间罐相同 如果存在多个版本,请删除不需要的版本

  • 问题内容: 我不明白注释和之间的实际区别是什么? 扩展名还是它们具有完全不同的含义?什么时候应该使用它们?在服务层中使用Spring ,在DAO 中使用javax? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法外,还允许CDI bean方法是事务性的。因此,

  • 我在CentOS虚拟机中安装了RabbitMQ,该虚拟机的网络适配器被定义为Bridge。我正在尝试配置RabbitMQ管理,以便通过机器的IP地址访问WebApp。配置如下:

  • 这个FAQ的最新版本总是可以从Apache主站点得到,位于<http://httpd.apache.org/docs/2.2/faq/> 如果你的问题在这里没有找到答案,你也可以看看Apache 1.3 FAQ ,看你的问题是否在那里有了答案。 主题 背景 关于 Apache HTTP Server 的背景知识。 支持 我遇到问题该怎么办? 错误信息 这些错误信息是什么意思? 背景 什么是Apac

  • 发布问题 更新问题 设置问题悬赏 获取问题列表 获取一个问题详情 删除一个问题 获取用户发布的问题列表 发布问题 POST /questions 输入 字段 类型 描述 subject 字符串 必须,问题主题或者说标题,不能超过 255 字节 ,必须以 ? 结尾。(不区分全角或者半角) topics 数组 必须,绑定的话题,数组子节点必须符合 { "id": 1 } 的格式。 body 字符串

  • 问题内容: 我简直不敢相信我网站上正在发生的事情。当我添加此行时: 一切正常。如果我不这样做,CSS就会“混乱”,一切都会变得不同,布局也会变得“丑陋”。 这条线如何解决所有问题? 问题答案: 您正在将HTML与XHTML混合使用。 通常,声明用于区分HTMLish语言的版本(在这种情况下为HTML或XHTML)。 不同的标记语言将表现不同。我最喜欢的例子是。在浏览器中查看以下内容: XHTML

  • 我试图在fabric rocket chat上联系,但没有得到太多帮助,因此在SO上发布了它。我有以下疑问: 我们是否可以在链码内访问块高度(我知道这在客户端是可行的,但在链码内是否可能) 可以从链码中的正在进行的事务调用新事务吗? 想知道hyperledger Fabric中存储的数据的历史记录在哪里 我们可以根据链码中的transactionid进行查询吗? 在fabric链码中编写调度程序是