项目平台中用到一个通讯接口,与其他各个应用实现数据传输(用的WEBSERVICE),传输没问题,但是各个应用属于不同的厂商开发,相互之间没有联系。用的不同的技术发布的WEBSERVICE服务,有的用cxf,用的用axis;有的用xfire,有的是.net,PHp等还有的暂时不清楚,而且由于有的系统运行时间较长(有一定年头了)有些代码已经无法改变,只能通过区分名字或类型等标识位的方式来区分,并将各个WSDL服务生成各自相应的java客户端(平台是用JAVA),然后
if(application.type=cxf)
使用CXF生成的客户端,并调用,几行代码得到返回值
else if(application.type=axis)
使用axis生成的客户端,并调用,几行代码得到返回值
else if(application.type=xfire)
使用xfire生成的客户端,并调用,几行代码得到返回值
.....等等,如果再出现不同类型而上述类型均无法适用的只能在生成客户端,写IF判断,俗称“开口子”
能不能通过一种特定的动态搭建SOAP请求的方式统一下(平台用的CXF),以后不管用什么发布的服务,当然了方法名,参数,服务名等等这些肯定是不能变的。都可以做到无需修改代码、例如:
WSDL wsdl=new WSDL(url);
setServiceName(wsdl....getServiceName());
setPortName(wsdl....getPortName());
setNameSpace(wsdl....getNameSpace());
类似以上形式。谢谢
if(application.type=cxf)
使用CXF生成的客户端,并调用,几行代码得到返回值
else if(application.type=axis)
使用axis生成的客户端,并调用,几行代码得到返回值
else if(application.type=xfire)
使用xfire生成的客户端,并调用,几行代码得到返回值
.....等等,如果再出现不同类型而上述类型均无法适用的只能在生成客户端,写IF判断,俗称“开口子”
能不能通过一种特定的动态搭建SOAP请求的方式统一下(平台用的CXF),以后不管用什么发布的服务,当然了方法名,参数,服务名等等这些肯定是不能变的。都可以做到无需修改代码、例如:
WSDL wsdl=new WSDL(url);
setServiceName(wsdl....getServiceName());
setPortName(wsdl....getPortName());
setNameSpace(wsdl....getNameSpace());
类似以上形式。谢谢
解决方案 »
- proc 编译报错,连接不上数据库【在线等,搞定就结贴】【知道Java板块牛人多】
- 关于Spring面向方面编程的概念
- 关于一个struts标签的问题!急~~~在线等!
- myeclipse中有没有struts和spring框架功能
- 请给个spring的remoting.httpinvoker成功进行远程调用的例子原码?
- struts不同的formbean能否用一个action处理
- xml树菜单里如何调用action (struts结构)
- 我的ejb在发布时报这个错.....
- j2ee启动问题:Exception in thread "main" java.lang.NoClassDefFoundError: Files\Common
- 进来看看,各位。
- 有没有什么书,是从头到尾专门讲一个项目让我们跟着敲代码的?求书
- 程序老是报错:No getter method for property: "password2" of bean
javax.xml.rpc.Service;
javax.xml.rpc.Call;
private static final QName PORT_NAME = new QName("http://ws.ems.onlan.com", "ServiceSkeletonPort");
public static void main(String[] args) {
Service service = Service.create(SERVICE_NAME);
String endpointAddress = "http://localhost:8080/ems/services/Service";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
WSprovider hw = service.getPort(WSprovider.class); System.out.println(hw.testWS("vwefwef"));
}
public static void main(String[] args) throws Exception {
QName serviceName = new QName(
"http://test.api.webservice.com", "TestService");
QName portName = new QName("http://test.api.webservice.com",
"TestServiceSoap"); Service service = Service.create(serviceName);
String endpointAddress = "http://localhost/TestService/TestService.asmx";
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
endpointAddress);
TestServiceSoap soap= service.getPort(portName, TestServiceSoap.class); System.out.println(soap.syncOrganizations(new ArrayList<String>(), "A")
.getString().size());
}
以上报
信息: Problem initializing MSV validation
java.lang.NoSuchMethodError: org.codehaus.stax2.validation.XMLValidationSchemaFactory.<init>(Ljava/lang/String;)V
at com.ctc.wstx.msv.BaseSchemaFactory.<init>(BaseSchemaFactory.java:48)
at org.apache.cxf.wstx_msv_validation.W3CMultiSchemaFactory.<init>(W3CMultiSchemaFactory.java:52)
at org.apache.cxf.wstx_msv_validation.Stax2ValidationUtils.<init>(Stax2ValidationUtils.java:54)
at org.apache.cxf.wstx_msv_validation.WoodstoxValidationImpl.<init>(WoodstoxValidationImpl.java:50)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at org.apache.cxf.bus.extension.Extension.load(Extension.java:105)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:183)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.processExtension(ExtensionManagerImpl.java:158)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.loadFragment(ExtensionManagerImpl.java:151)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.load(ExtensionManagerImpl.java:143)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.load(ExtensionManagerImpl.java:96)
at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:129)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:41)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:37)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:33)
at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:90)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:137)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:122)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:89)
at javax.xml.ws.Service.<init>(Service.java:35)
at javax.xml.ws.Service.create(Service.java:126)
at com.essp.webservice.api.Test.main(Test.java:19)
2011-11-2 16:16:48 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass网上找了半天没找到相应的包
我把这部分做成了一个补丁包,并采用配置文件的形式,各个接口统一调用我的一个核心服务接口,具体实现的类由各个项目的补丁包去实现。因为各个项目有不同的实现,方式,名称都不一样,已经比较完美的解决了我想到的问题呵呵,项目实施人员也说比较灵活了。补丁包他们可以改