[英]Convert soap xml to java
我有來自soap服務的日志文件,該文件當前存在xml請求/響應。 我如何將其轉換為java對象而無需任何封送處理/映射和手動解析? 僅創建綁定類,將其放入wsld並調用read()方法。
我的系統使用cfx和Aegis綁定。 這是我的代碼,但無法解析對象,因為不知道如何映射對象。 關於如何將wsdl綁定到我的目標的確切問題。
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);
我找到了解決方案:要使用Aegis從soap-xml轉換為Java對象,您需要創建AegisDatabind(可以通過重寫來實現),而不是使用ClientFactoryBean創建cxf客戶端,現在您的綁定是使用wsdl初始化的。 但是對於所有這些工作,您應該使用wsdl或使用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.