将soapxml转换为java
我有来自soap服务的日志文件,其中显示xml请求/响应。如何将其转换为java对象而无需任何封送/映射和手动解析?只创建绑定类,将其放入wsld并调用read()方法 我的系统使用cfx和Aegis绑定。这是我的代码,但它不能pars对象,因为我不知道如何映射对象。正是关于如何将wsdl绑定到我的目标的问题将soapxml转换为java,java,soap,xml-parsing,Java,Soap,Xml Parsing,我有来自soap服务的日志文件,其中显示xml请求/响应。如何将其转换为java对象而无需任何封送/映射和手动解析?只创建绑定类,将其放入wsld并调用read()方法 我的系统使用cfx和Aegis绑定。这是我的代码,但它不能pars对象,因为我不知道如何映射对象。正是关于如何将wsdl绑定到我的目标的问题 AegisDatabindingFactoryBean factoryBean = new AegisDatabindingFactoryBean(); factoryBean.set
AegisDatabindingFactoryBean factoryBean = new AegisDatabindingFactoryBean();
factoryBean.setWriteXsiTypes(true);
factoryBean.setOverrideTypes(overridedClassList);
factoryBean.setSupportVariations(true);
AegisDatabinding dataBinding = factoryBean.createAegisDatabinding();
DataReader<XMLStreamReader> dataReader = dataBinding.createReader(XMLStreamReader.class);
String tempData = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>...";
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = factory.createXMLStreamReader(new StringReader(tempData));
Object result = dataReader.read(streamReader);
AegisDatabindingFactoryBean factoryBean=新的AegisDatabindingFactoryBean();
setWriteXsiTypes(true);
setOverrideTypes(overridedClassList);
factoryBean.setSupportVariations(true);
AegisDatabinding-dataBinding=factoryBean.createAegisDatabinding();
DataReader DataReader=dataBinding.createReader(XMLStreamReader.class);
字符串tempData=“…”;
XMLInputFactory=XMLInputFactory.newInstance();
XMLStreamReader streamReader=factory.createXMLStreamReader(新的StringReader(tempData));
对象结果=dataReader.read(streamReader);
我找到了解决方案:要使用Aegis将soap xml转换为java对象,您需要创建AegisDatabind(它可以是重写的标准),而不是使用ClientFactoryBean创建cxf客户端,现在您的绑定是使用wsdl的init。但对于所有这些工作,您应该让服务器使用wsdl或将wsdl放入文件系统:
AegisDatabinding dataBinding = ... {your dataBinding};
ClientFactoryBean clientProxyFactoryBean = new ClientFactoryBean();
clientProxyFactoryBean.setDataBinding(dataBinding);
// Path to wsdl
clientProxyFactoryBean.setAddress("http://servername/app?wsdl");
// implemented service
clientProxyFactoryBean.setServiceClass(com.exigen.aaa.rating.home.ca.RatingService.class);
Client client = clientProxyFactoryBean.create();
DataReader<XMLStreamReader> dataReader = dataBinding.createReader(XMLStreamReader.class);
String tempData = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>...";
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = factory.createXMLStreamReader(new StringReader(tempData));
// miss all soap messages
while (true) {
if (streamReader.isStartElement()) {
System.out.println(streamReader.getName());
if ("{http://your.object.value/}arg1".equals(streamReader.getName().toString())) {
break;
}
}
streamReader.next();
}
Object result = dataReader.read(streamReader);
AegisDatabinding数据绑定=。。。{您的数据绑定};
ClientFactoryBean clientProxyFactoryBean=新ClientFactoryBean();
setDataBinding(数据绑定);
//wsdl的路径
clientProxyFactoryBean.setAddress(“http://servername/app?wsdl");
//实现服务
clientProxyFactoryBean.setServiceClass(com.exigen.aaa.rating.home.ca.RatingService.class);
Client=clientProxyFactoryBean.create();
DataReader DataReader=dataBinding.createReader(XMLStreamReader.class);
字符串tempData=“…”;
XMLInputFactory=XMLInputFactory.newInstance();
XMLStreamReader streamReader=factory.createXMLStreamReader(新的StringReader(tempData));
//错过所有soap消息
while(true){
if(streamReader.isStartElement()){
System.out.println(streamReader.getName());
如果(”{http://your.object.value/}arg1“.equals(streamReader.getName().toString()){
打破
}
}
streamReader.next();
}
对象结果=dataReader.read(streamReader);