簡體   English   中英

將soap xml轉換為Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM