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

Apache cxf端口常规创建

邴宏大
2023-03-14

在我的项目中,我必须创建一些Soap web服务客户机,我使用apache cxf创建端口并使用web服务,我注意到端口的创建我复制了很多代码,所以我创建了一个抽象类,如下所示

public abstract class WebServiceConsumerPort<P>{

    protected Class<P> port;

    private static Logger log = LoggerFactory.getLogger(WebServiceConsumerPort.class);

    public void createPort(String url, String timeoutS) {

        try {
            Long timeout = Long.parseLong(timeoutS);
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            factory.setServiceClass(port.getClass());
            factory.setAddress(url);

            port = (Class<P>) factory.create();

            Client client = ClientProxy.getClient(port);

            if (client != null) {

                log.info("Timeout WEB WERVICES: {}", timeout);

                HTTPConduit conduit = (HTTPConduit) client.getConduit();
                HTTPClientPolicy policy = new HTTPClientPolicy();
                policy.setAllowChunking(false);
                policy.setConnectionTimeout(timeout * 1000);
                policy.setReceiveTimeout(timeout * 1000);
                conduit.setClient(policy);
            }
        } catch (Exception e) {
            log.error("Peoblem creating the port", e);
        }
    }
}
public class WebService1Consumer extends WebServiceConsumerPort<WebService1Interface> {
        public void consumeMethod1() {
            port.method1();
        }

        public void consumeMethod2() {
            port.method2();
        }
    }

另一个类看起来像

public class WebService2Consumer extends WebServiceConsumerPort<WebService2Interface> {
        public void consumeMethod1() {
            port.method3();
        }

        public void consumeMethod2() {
            port.method4();
        }
    }

但在两个类中说不能解析端口中的方法。

共有1个答案

壤驷深
2023-03-14

它终于起作用了,代码如下所示:

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class WebServiceConsumerPort<P>{


    protected P puerto;
    private static Logger log = LoggerFactory.getLogger(WebServiceConsumerPort.class);

    public void creaPuerto(String url, String timeoutS, Class<P> tipoClase) {

        try {
            Long timeout = Long.parseLong(timeoutS);
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            factory.setServiceClass(tipoClase);
            factory.setAddress(url);
            puerto = (P) factory.create();

            Client client = ClientProxy.getClient(puerto);

            if (client != null) {
                HTTPConduit conduit = (HTTPConduit) client.getConduit();
                HTTPClientPolicy policy = new HTTPClientPolicy();
                policy.setAllowChunking(false);
                policy.setConnectionTimeout(timeout * 1000);
                policy.setReceiveTimeout(timeout * 1000);
                conduit.setClient(policy);
            }
            nIntento = 0;
        } catch (Exception e) {
            puerto = null;
            nIntento++;
        }
    }
}

感谢@Ben-Thurley在帖子中给出的答案

 类似资料:
  • 我尝试在weblogic服务器上部署使用Spring apache cxf的应用程序。我一直收到这条错误消息: javax。servlet。ServletException:Servlet类:org。阿帕奇。cxf。运输servlet。CXFServlet’不实现javax。servlet。weblogic上的Servlet。servlet。内部的StubSecurityHelper$Servle

  • 问题内容: 用于规范模式状态的Termios手册页(http://man7.org/linux/man- pages/man3/termios.3.html ): 逐行提供输入。输入一个行定界符(NL,EOL,EOL2;或在行首的EOF)时,输入行可用。除EOF以外,行定界符包含在read(2)返回的缓冲区中。 我的问题是:当一块硬件输出符合规范的数据时,是否将0xD0xA(CRLF)字节放在传输

  • 使用情况数据 共享使用情况数据 如果你想让设备发送有关你如何使用 Navicat Data Modeler 的信息来帮助我们进行改进,可勾选这个选项。你可以点击“使用情况数据”按钮来查看正在共享的信息。 更新 自动检查更新 勾选这个选项允许 Navicat Data Modeler 在已选择的时间自动检查新的版本。 包括匿名的系统配置文件 如果你想在 Navicat Data Modeler 检查

  • 常规 布景主题 选择使用 Windows OS 的布景主题还是深色主题。 【提示】需要重新启动 Navicat Data Modeler 才生效。 语言 选择 Navicat Data Modeler 界面显示的语言。 【提示】需要重新启动 Navicat Data Modeler 才生效。 显示工具栏标题 在 Navicat Data Modeler 工具栏按钮显示文本。否则,只有按钮显示。 【

  • 常规 布景主题 选择使用 Windows OS 的布景主题还是深色主题。 【提示】需要重新启动 Navicat 才生效。 语言 选择 Navicat 界面显示的语言。 【提示】需要重新启动 Navicat 才生效。 允许重复运行 Navicat 如果你想打开多个 Navicat 实例,可勾选这个选项。取消勾选此项目意味著当双击 Navicat 快捷方式时,将会重新启动正在运行的 Navicat 实

  • 主窗口 在导航窗格中的模式下显示对象 在导航窗格使用树状结构显示数据库对象。若要展开節點,简单地双击它。 【提示】需要重新打开数据库或模式才生效。 字体 定义对象列表使用的字体和字体大小。 使用默认字体 若要使用默认的字体设置,可勾选这个选项。 数据库项目 如果表没有主键,则发出警告 当打开没有设置主键的表时,如果你需要通知,可勾选这个选项。 显示函数向导 当你创建新的函数或过程时,显示函数向导(