使用Java DSL的Camel CXF POJO模式

2024-03-11

我有一个预先存在的 Web 服务“连接”(SOAP),如果可能的话,我想在不使用 Swing 框架的情况下进行调用。我遵循接触优先开发,使用 cxf/wsdl2java 工具生成我的 java 文件。

我希望从 java 对象中提取用户名和密码并将其放入 SOAP 对象中,然后发送到我的本地主机 Web 服务上。

当将 Connect 对象作为主体发送到“direct:start”时,出现异常...

Caused by: java.lang.IllegalArgumentException: Get the wrong parameter size to invoke the out service, Expect size 2, Parameter size 1. Please check if the message body matches the CXFEndpoint POJO Dataformat request.

我已经检查过第一个参数实际上是传入的 Connect 对象的实例。

我是否需要在其中一个类中添加一些附加注释,测试方法是否无效或
我应该遵循其他模式吗?

public class TestConnectCXF extends CamelTestSupport
{
    @Override
    protected RouteBuilder createRouteBuilder() throws Exception
    {
        return new RouteBuilder()
        {
            String cxfAddressLine = "cxf:http://localhost:8081/nuxeo/webservices/privateadservice?wsdlURL=wsdl/privateadservice.wsdl" //
                    + "&dataFormat=POJO" //
                    + "&serviceClass=com.sandbox.camelfeed.PrivateAdServiceInterface" //
                    + "&serviceName={http://ws.sandboxtest.com/}PrivateAdService" //
                    + "&synchronous=true" //
                    + "&loggingFeatureEnabled=true" //
                    + "&portName={http://ws.sandboxtest.com/}PrivateAdServiceInterfacePort";
            @Override
            public void configure() throws Exception
            {
                from("direct:start").to(cxfAddressLine).to("mock:end");
            }
        };
    }

    @Test
    public void testConnectViaPojo() throws InterruptedException
    {
        Connect connectToServer = new Connect();
        connectToServer.setUserName("FakeUser");
        connectToServer.setPassword("scrubbed");
        template.sendBody("direct:start", connectToServer);
        Thread.sleep(1000);
    }
}

我是骆驼和网络服务的新手,因此任何有用的指示将不胜感激。

附加信息

使用骆驼2.10,Java 1.6

从 wsdl2java 生成的类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "connect", propOrder = {
   "userName",
   "password"
})
public class Connect {

protected String userName;
protected String password;

public String getUserName() {
    return userName;
}

public void setUserName(String value) {
    this.userName = value;
}


public String getPassword() {
    return password;
}

public void setPassword(String value) {
    this.password = value;
}
}

@WebService(targetNamespace = "http://ws.sandboxtest.com/", name = "PrivateAdServiceInterface")
@XmlSeeAlso({ObjectFactory.class})
public interface PrivateAdServiceInterface {

        // Omitted Code relating to other web calls

        @WebResult(name = "return", targetNamespace = "")
        @RequestWrapper(localName = "connect", targetNamespace = "http://ws.sandboxtest.com/", className = "com.sandbox.camelfeed.Connect")
        @WebMethod
        @ResponseWrapper(localName = "connectResponse", targetNamespace = "http://ws.sandboxtest.com/", className = "com.sandbox.camelfeed.ConnectResponse")
        public java.lang.String connect(
            @WebParam(name = "userName", targetNamespace = "")
            java.lang.String userName,
            @WebParam(name = "password", targetNamespace = "")
            java.lang.String password
        ) throws ClientException_Exception;
    }

@XmlRegistry
public class ObjectFactory {
{
    // Omitted other web calls information
      private final static QName _Connect_QNAME = new QName("http://ws.sandboxtest.com/", "connect");

    @XmlElementDecl(namespace = "http://ws.sandboxtest.com/", name = "connect")
    public JAXBElement<Connect> createConnect(Connect value) {
        return new JAXBElement<Connect>(_Connect_QNAME, Connect.class, null, value);
    }

}

根据我的经验,Camel 中的某些操作(例如调用 SOAP Web 服务或进行 REST 调用)在自定义处理器中比使用 CXF、HTTP 或 HTTP4 等组件更容易完成。

我通常使用 Spring,因此我倾向于使用 Spring REST 模板或 JaxWsPortProxyFactoryBean(用于 Web 服务调用)进行出站调用。

以下是使用 JAX-WS 调用的示例:

    public class WebServiceProcessorBean {

    @Autowired
    private JAXWSProxy theProxy;


    public void callWebservice(Exchange exchange) {
        Response response = theProxy.call();

        //Do something with the response and Exchange.
    }
  }

Spring应用程序上下文中的定义:

<bean id="theProxyService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
        <property name="serviceInterface" value="XXX"/>
        <property name="wsdlDocumentUrl" value="http://xxxxx.wsdl"/>
        <property name="namespaceUri" value="xxxx"/>
        <property name="serviceName" value="xxxx"/>
        <property name="portName" value="xxxxx"/>
</bean> 

使用 Spring 应用程序上下文中定义的 WebServiceProcessorBean 和 beanRef() DSL 方法。

.beanRef("theProxyService", "callWebservice")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java DSL的Camel CXF POJO模式 的相关文章

随机推荐

  • android 获取CountdownTimer上的剩余时间并使用剩余时间作为分数

    所以我这里有测验应用程序和计时器 所以我想要发生什么 例如 我将计时器设置为 15 秒 如果用户在 5 秒内回答问题 我希望 10 秒的剩余时间变成 10 分 它将添加到之前的分数加上您将获得的分数回答问题 所以现在我有这个 if save
  • 使用 firebaserecycleradapter 过滤 recyclerview

    我有一个带有 FirebaseRecyclerAdapter 的 RecyclerView 当用户开始在 SearchView 中输入内容时 我想用名称列表填充 RecyclerView public class SchoolsAdapte
  • Android 到 PC USB 读/写

    我在 PC 上有一个程序 从 USB 接收字符串输入 旧程序 我有一个 Android 4 X 平板电脑 需要向在 PC 上运行的程序提供 USB 上的字符串输入 当我在 Android 上使用示例代码时 以下代码给出了空的哈希图 PC 在
  • 这个“模式”有名字吗?

    我想知道这个 模式 是否有一个名称 其中方法签名称为 TrySomething 例如int TryParse decimal TryParse etc 我的一位同事经常使用这种命名约定 他们不会返回值或抛出异常 而是调用一个方法TryDoS
  • sql Server:按积分总和排名并按排名排序

    我有一个包含以下字段的游戏桌 ID Name Email Points 1 John email protected cdn cgi l email protection 120 2 Test email protected cdn cgi
  • 哪个更快:x<<1 或 x<<10?

    我不想优化任何东西 我发誓 我只是出于好奇而想问这个问题 我知道在大多数硬件上都有位移位的汇编命令 例如shl shr 这是一个单一命令 但移位多少位 从纳秒角度或从 CPU 角度角度 是否重要 换句话说 以下任一选项在任何 CPU 上都更
  • ghc-pkg 检查黑线鳕警告

    全新安装 haskell 平台后 通过homebrew GHC x64 7 6 3 on OSX 10 9 2当我运行时 我收到以下警告ghc pkg check 见下文 Warning haddock interfaces Users u
  • JAXB 解组未知 XML 内容的子集

    我有一个要求unmarshall未知的子集XML内容 对于该未编组的对象 我需要修改一些内容并将相同的 XML 内容 子集 与原始 XML 重新绑定 输入 XML 示例
  • 如何从 C# 解密 ruby​​ 中的 RijandelManaged?

    static byte keyBytes new byte 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 static byte iv new byte 1
  • 为什么指针变量不显示 100 位数字?

    目标 我对准确性有要求 我需要显示 100 位数字或至少 50 位数字 尝试 1 首先我使用了整数变量 然后它只显示 10 位数字 尝试2 在我朋友的帮助下 我使用指针概念 它成功输入了50到100位数字 但指针变量仅显示10位数字 我写的
  • 在rails中执行AJAX Post而不传递authenticity_token

    所以我记得有一次 当我尝试做一篇 AJAX 帖子时 我必须将 form authenticity token 作为数据之一传递给 Rails 由于某种原因 不这样做会产生某种错误 我会立即注销 有没有办法仍然拥有这个真实性令牌用于表单提交但
  • 如何在 htaccess 中启用阿拉伯语 slug?

    我有一个多语言网站 我正在尝试创建一个友好的 URL 在我的数据库中 我有slug场地 当文章的标题是英文时 slug 会出现在 url 中 并且重定向工作正常 但当标题是阿拉伯语时 会出现 slug 并且重定向显示 未找到对象 page
  • 请解释闭包,或将循环计数器绑定到函数范围

    我见过程序员使用计数器在循环内分配事件侦听器 我相信这是语法 for var i 0 i lt someArray length i someArray i onclick function i Some code using i i 有人
  • Material ui 'new' v5.0.0jectFirst 无法设置特异性

    MUI v5 0 0今天发布了 在我的尖峰分支中 我正在尝试更新到新版本 我正在执行 mui docs 中详细的步骤here https mui com guides migration v4 theme 我在用styled compone
  • 如何自动化 Google 主页自动建议?

    这是我的测试类 包含所有代码行 我认为问题出在 xpath 中 因为它无法找到元素 package practice import java util List import org openqa selenium By import or
  • 错误 E QUERY [thread1] 语法错误:使用和/或使用 find() 的属性 id @(shell) 无效

    我在使用此查询时收到错误 db a find or name aekansh age 21 pretty 作为 E 查询 thread1 语法错误 无效的属性 id shell 1 11 集合 a 将数据存储为 id 10 name aek
  • Firestore PERMISSION_DENIED

    当我在 macOS 上编写 flutter 应用程序时遇到这个问题 相同的基本代码在我的 Windows 电脑中工作 但在 macOS 中不起作用 正如您在我的日志中看到的 应用程序已连接 但我仍然无法对我的 Firestore 数据库发出
  • iPhone DropBox API:如何加载文件?

    关于 dropBox 集成到 iPhone 应用程序中的一个非常基本的问题 我按照 DropBoxSDK 的设置进行操作 一切正常 我可以登录我的帐户并将其链接 所以我正确地设置了一切 现在我想用它简单地从 dropBox 加载文件并再次保
  • JSF 错误消息和程序卡住。 JSON 解析错误和 primefaces

    我在facelets中有以下形式
  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并