gpt4 book ai didi

java - 如何解码包含 @XmlAnyElement 和 DIFFGR 的 XML 代码

转载 作者:行者123 更新时间:2023-12-01 11:15:42 25 4
gpt4 key购买 nike

我正在尝试处理来自网络服务的 SOAP 响应。我使用 wsimport 工具生成用于处理 SOAP 响应的客户端类。下面是示例 SOAP 响应和 Java 处理程序。

SOAP react :

<?xml version="1.0" encoding="UTF-8"?>
<DataSet xmlns="http://tempuri.org/">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="NTIS">
<xs:complexType>
<xs:sequence>
<xs:element name="Error" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NTIS diffgr:id="NTIS1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<Error>UserName and/or Password are invalid.</Error>
</NTIS>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

Java 处理程序类

package org.tempuri;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.w3._2001.xmlschema.Schema;


/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="GetQueryNewResult" minOccurs="0">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element ref="{http://www.w3.org/2001/XMLSchema}schema"/>
* &lt;any/>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"getQueryNewResult"
})
@XmlRootElement(name = "GetQueryNewResponse")
public class GetQueryNewResponse {

@XmlElement(name = "GetQueryNewResult")
protected GetQueryNewResponse.GetQueryNewResult getQueryNewResult;

/**
* Gets the value of the getQueryNewResult property.
*
* @return
* possible object is
* {@link GetQueryNewResponse.GetQueryNewResult }
*
*/
public GetQueryNewResponse.GetQueryNewResult getGetQueryNewResult() {
return getQueryNewResult;
}

/**
* Sets the value of the getQueryNewResult property.
*
* @param value
* allowed object is
* {@link GetQueryNewResponse.GetQueryNewResult }
*
*/
public void setGetQueryNewResult(GetQueryNewResponse.GetQueryNewResult value) {
this.getQueryNewResult = value;
}


/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element ref="{http://www.w3.org/2001/XMLSchema}schema"/>
* &lt;any/>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"schema",
"any"
})
public static class GetQueryNewResult {

@XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
protected Schema schema;
@XmlAnyElement(lax = true)
protected Object any;

/**
* Gets the value of the schema property.
*
* @return
* possible object is
* {@link Schema }
*
*/
public Schema getSchema() {
return schema;
}

/**
* Sets the value of the schema property.
*
* @param value
* allowed object is
* {@link Schema }
*
*/
public void setSchema(Schema value) {
this.schema = value;
}

/**
* Gets the value of the any property.
*
* @return
* possible object is
* {@link Object }
*
*/
public Object getAny() {
return any;
}

/**
* Sets the value of the any property.
*
* @param value
* allowed object is
* {@link Object }
*
*/
public void setAny(Object value) {
this.any = value;
}

}

}

客户端程序:

package org.ritwik.client;

import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.soap.Node;

import org.tempuri.BACOnlineResponse;
import org.tempuri.BACOnlineResponse.BACOnlineResult;
import org.tempuri.BASCOnlineResponse;
import org.tempuri.BASCOnlineResponse.BASCOnlineResult;
import org.tempuri.DEAAppSearch;
import org.tempuri.DEAAppSearchResponse;
import org.tempuri.DEAAppSearchResponse.DEAAppSearchResult;
import org.tempuri.Deawebsvc;
import org.tempuri.DeawebsvcSoap;
import org.tempuri.GetIssueDate;
import org.tempuri.GetIssueDateResponse;
import org.tempuri.GetQueryResponse;
import org.tempuri.GetUserInfoResponse;
import org.tempuri.GetUserInfoResponse.GetUserInfoResult;
import org.tempuri.IsUserValidResponse;
import org.tempuri.ObjectFactory;
import org.w3c.dom.Element;

public class WsClient {

/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Deawebsvc deaw=new Deawebsvc();
DeawebsvcSoap impl=deaw.getDeawebsvcSoap();
ObjectFactory of=new ObjectFactory();
DEAAppSearchResponse dsSearch=of.createDEAAppSearchResponse();
dsSearch.setDEAAppSearchResult(impl.deaAppSearch("deatest@ritwik.com"," deavalidation", "dea", "bac", "basc", "expirationFrom", "expirationTo", "company", "zip", "state", "pi", "maxRows"));
System.out.println(dsSearch.getDEAAppSearchResult().toString());
System.out.println(dsSearch.getDEAAppSearchResult().getAny());



}

}

现在的问题是我无法处理来自“getDEAAppSearchResult().getAny()”的结果集合。请建议如何处理内容或对其进行解码。

org.tempuri.DEAAppSearchResponse$DEAAppSearchResult@7bc768[diffgr:diffgram: null]

最佳答案

我遇到了类似的问题,我使用 Unmarshaller 将详细节点解码为有意义的对象。在我的问题中,生成了详细的类(示例中的 NewDataSet)。以下内容可能适合您:

JAXBContext jaxbContext = JAXBContext.newInstance(NewDataSet.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Node node = (Node) dsSearch.getDEAAppSearchResult().getAny();
NewDataSet dataset = (NewDataSet)unmarshaller.unmarshal(node.getFirstChild());

关于java - 如何解码包含 @XmlAnyElement 和 DIFFGR 的 XML 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com