@XmlPath
주석에 네임 스페이스 정보를 포함해야합니다. 당신의 XML 문서는 네임 스페이스의 자격을 가지고 있기 때문에
패키지 정보
, 당신은 공간 정보를 지정 패키지 레벨 @XmlSchema
주석을 활용해야합니다. 네임 스페이스에있는 XmlPath의 조각에 대한 @XmlPath
매핑에서 회사
@XmlSchema(
namespace="http://www.example.com/",
xmlns={
@XmlNs(namespaceURI = "http://www.example.com/", prefix = "foo")
}
)
package forum14848450;
import javax.xml.bind.annotation.*;
은 당신이 @XmlSchema
주석에 정의 된 접두사를 활용해야하는 자격.
package forum14848450;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
public class Company {
@XmlPath("foo:employee/job/text()")
private String employeeJob;
@XmlPath("foo:employee/name/text()")
private String employeeName;
@XmlPath("foo:employee/age/text()")
private int employeeAge;
}
jaxb.properties
는 (: http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html 참조) 다음 항목을 사용하여 도메인 모델과 동일한 패키지에 jaxb.properties
라는 파일을 포함 할 필요가 당신의 JAXB 공급자로 MOXY을 지정합니다.
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
데모
데모 코드는 아래 질문에서 문서를 비 정렬 화되고, 다시 XML로 마샬링.
package forum14848450;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Company.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum14848450/input.xml");
Company company = (Company) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(company, System.out);
}
}
출력 아래
데모 코드를 실행 한 출력됩니다. 출력 문서가 @XmlPath
주석에 정의 된 접두사를 사용하는 방법에 유의하십시오. 추가 정보
<?xml version="1.0" encoding="UTF-8"?>
<foo:company xmlns:foo="http://www.example.com/">
<foo:employee>
<job>sogi</job>
<name>togi</name>
<age>22</age>
</foo:employee>
</foo:company>