1
intitial XML (BPEL) 파일을 감안할 때 : 나는 XML 내부에서 일부 데이터를 수정하기 위해 JAXB를 사용하는 함수를 작성했습니다JAXB 마샬링 문제 - 아마 관련 이름 공간에 대한 비교가되어
<?xml version="1.0" encoding="UTF-8"?>
<process
name="TestSVG2"
xmlns="http://www.example.org"
targetNamespace="http://www.example.org"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<sequence>
<receive name="Receive1" createInstance="yes"/>
<assign name="Assign1"/>
<invoke name="Invoke1"/>
<assign name="Assign2"/>
<reply name="Reply1"/>
</sequence>
</process>
합니다.
이public void editAction(String name, String newName) {
Process proc;
StringWriter sw = new StringWriter();
JAXBContext jaxbContext = null;
Unmarshaller unMarsh = null;
Object obj = new Object();
try {
/* XML TO JAVA OBJECT */
jaxbContext = JAXBContext.newInstance("org.example");
unMarsh = jaxbContext.createUnmarshaller();
obj = unMarsh.unmarshal(new File(path + "/resources/" + BPELFilename));
proc = (Process) obj;
Process.Sequence sequence = proc.getSequence();
/* Determine which element needs to be edited */
/* Do some editing , code wasn't included */
/* OBJ Back to XML */
Marshaller marsh = jaxbContext.createMarshaller();
marsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
//marsh.setProperty("com.sun.xml.bind.namespacePrefixMapper", new CustomPrefixMapper());
marsh.marshal(obj, new File(path + "/resources/" + BPELFilename));
} catch (JAXBException e) {
/* Be afraid */
e.printStackTrace();
}
}
JAXB 프로 관련 편집 후 결과 XML은 다음과 같습니다 : 다음과 같이 기능은 불행하게도
<!-- After -->
<?xml version="1.0" encoding="UTF-8"?>
<ns0:process
name="TestSVG2"
targetNamespace="http://www.example.org"
xmlns:ns0="http://www.example.org">
<ns0:sequence>
<ns0:receive name="newName" createInstance="yes"/>
<ns0:assign name="Assign1"/>
<ns0:assign name="Assign2"/>
<ns0:invoke name="Invoke1"/>
<ns0:reply name="Reply1"/>
</ns0:sequence>
</ns0:process>
결과 XML, 우리의 XML 파서가 충돌하는 경우와 같이, 우리의 응용 프로그램에 호환되지 않는 새 XML을 구문 분석하고 있습니다.
그래서 :
- 가 어떻게 결과 XML에 네임 스페이스
ns0
를 제거하는 방법은 무엇입니까? - 초기 XML 파일 (
xml:xsd
이 누락되었습니다)에서 동일한 헤더를 유지하는 방법은 무엇입니까?
감사합니다.
도메인 오브젝트 : 당신이 MOXy JAXB 구현을 사용하는 경우
합니다. JAXBContext는 스레드로부터 안전하기 때문에 이것을 한 번 생성 한 다음 해당 인스턴스를 다시 사용할 수 있습니다. –
@Blise Doughan Blaise 감사합니다. 이 함수는 프로토 타입의 일부입니다. 우리는 다른 도서관을 평가하고 있으며, 우리는 JAXB에 왔습니다. 이것은 '진짜'프로젝트가 아닙니다. 그러나 나는 분명히 당신의 관찰을 고려할 것입니다. –
JAXB가 가장 강력한 XML 바인딩 라이브러리라고 생각합니다. 저는 JAXB 전문가 그룹의 일원이며 MOXy JAXB 구현을 이끌고 있습니다. 언제든지 평가에 JAXB 질문이 있으면 여기에 질문을 게시하거나 [email protected]에 문의하십시오. –