在我的项目中,我必须创建一些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();
}
}
但在两个类中说不能解析端口中的方法。
它终于起作用了,代码如下所示:
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 实
主窗口 在导航窗格中的模式下显示对象 在导航窗格使用树状结构显示数据库对象。若要展开節點,简单地双击它。 【提示】需要重新打开数据库或模式才生效。 字体 定义对象列表使用的字体和字体大小。 使用默认字体 若要使用默认的字体设置,可勾选这个选项。 数据库项目 如果表没有主键,则发出警告 当打开没有设置主键的表时,如果你需要通知,可勾选这个选项。 显示函数向导 当你创建新的函数或过程时,显示函数向导(