저는 webservices 클라이언트 응용 프로그램에서 일하고 있는데 대부분 작동합니다. 제 3 자 웹 서비스 벌금에서 데이터를 검색하고 읽을 수 있습니다. 이제 일부 데이터를 제출해야하며 막혔습니다.Java 객체를 XML 요소로 변환 하시겠습니까?
내가 검색하거나 제출하는 객체의 클래스는 xjc 도구를 통해 XSD 파일에서 생성되었습니다. 내가 붙어있는 부분은 그 객체들 중 하나를 XML 트리로 변환하여 웹 서비스에 제출하는 것입니다.
ws와의 요청을 검색/전송할 때 'payload'개체가 포함되어 있습니다.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PayloadType", propOrder = {
"compressed",
"document",
"any",
"format"
})
public class PayloadType {
@XmlElement(name = "Compressed")
protected String compressed;
@XmlElement(name = "Document")
protected List<String> document;
@XmlAnyElement
protected List<Element> any;
protected String format;
public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}
}
내가 XML 트리를 포함하는 '모든'필드와 걱정 유일한 필드 : 이것은 (부분 목록)로 자바 코드에 정의되어 있습니다. ws에서 데이터를 검색 할 때이 필드를 다음과 같이 읽습니다. ('root'는 org.w3c.dom.Element 유형이고 getAny(). get (0)을 호출 한 결과입니다. 페이로드 개체)
NodeList nl = root.getElementsByTagName("ns1:Process"); // "ns1:Process" is an XML node to do something with
if (nl != null && nl.getLength() > 0) {
for (int i = 0; i < nl.getLength(); i++) {
Element proc = (Element) nl.item(i);
try {
// do something with the 'proc' Element here...
} catch (Exception ex) {
// handle problems here...
}
}
}
데이터 제출이 막혔습니다. 어떻게하면 XSD에서 생성 된 클래스 중 하나에서 생성 된 자바 객체를 가져 와서 'any'페이로드 객체 목록에 추가 할 수있는 Element 객체로 변환 할 수 있습니까? 예를 들어, 나는 DailyData 클래스를 가지고 있고 생성하고 데이터로 채울 경우 :
DailyData dData = new DailyData();
dData.setID = 34;
dData.setValues = "3,5,76,23";
어떻게 페이로드 객체의 '어떤'목록에 그 '를 dData'객체를 추가하는 방법은 무엇입니까? 그것은 요소 여야합니다. JAXBContext marshaller로 무언가를합니까? 저는 XML 구조를 검사하기 위해 'dData'객체를 화면에 덤프하는 데 사용했습니다.
나는 그 대답이 얼굴에서 나를 응시하고 있다고 확신하지만 나는 그것을 볼 수 없다!
데이브
UPDATE :
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc = dbf.newDocumentBuilder().newDocument();
JAXBContext context = JAXBContext.newInstance(DailyData.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(dData, doc);
PayloadType payload = new PayloadType();
payload.getAny().add((Element)doc.getFirstChild());
을 내가 생각 * * 나는 그것을 알아 낸하지만 수 DEV 환경에서 몇 가지 테스트 데이터가 나올 때까지 확실하게 알 수는 없을 것입니다. 정확하다고 밝혀지면 내 대답을 게시 할 것입니다. – DaveKub
투표를했기 때문에 자신의 질문에 답을 해 주었으면합니다 :-) 가장 유용합니다. – rds