Java 有没有办法用JaxB将一个类包装在另一个类中的elementwrapper?
我试图从xml中获得一个输出,它需要对我已经拥有的类进行包装。但我无法包装这些元素 我已经尝试过Java 有没有办法用JaxB将一个类包装在另一个类中的elementwrapper?,java,xml,class,nested,jaxb,Java,Xml,Class,Nested,Jaxb,我试图从xml中获得一个输出,它需要对我已经拥有的类进行包装。但我无法包装这些元素 我已经尝试过@xmlementwrapper这个类,也尝试过以某种方式嵌套,但都没有成功 这是我的地址类 @XmlRootElement(name="v41:address") public class Address { private String street; private String housenr; private String zip; pri
@xmlementwrapper
这个类,也尝试过以某种方式嵌套,但都没有成功
这是我的地址类
@XmlRootElement(name="v41:address")
public class Address {
private String street;
private String housenr;
private String zip;
private String city;
public Address(String street, String housenr, String zip, String city) {
setStreet(street);
setHousenr(housenr);
setZip(zip);
setCity(city);
}
public Address(){
}
@XmlElement(name = "v41:street")
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@XmlElement(name = "v41:houseNr")
public String getHousenr() {
return housenr;
}
public void setHousenr(String housenr) {
this.housenr = housenr;
}
@XmlElement(name = "v41:zip")
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
@XmlElement(name = "v41:city")
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"street='" + street + '\'' +
", housenr=" + housenr +
", zip=" + zip +
", city='" + city + '\'' +
'}';
}
}
这是我的请求类
@XmlRootElement(name="v41:request")
public class WSGRequest {
private String ispId;
private String returnSpeekAtNok;
private String basisContrEleId;
private String contrEleId;
private String bbType;
private String dnType;
private String qualifExtRef;
private String correlationId;
private String correlationValue;
public WSGRequest(String ispId, String returnSpeekAtNok, String basisContrEleId, String contrEleId, String bbType, String dnType, String qualifExtRef, String correlationId) {
setIspId(ispId);
setReturnSpeekAtNok(returnSpeekAtNok);
setBasisContrEleId(basisContrEleId);
setContrEleId(contrEleId);
setBbType(bbType);
setDnType(dnType);
setQualifExtRef(qualifExtRef);
setCorrelationid(correlationId);
}
public WSGRequest() {
}
@XmlAttribute
public String getCorrelationid() {
return correlationId;
}
public void setCorrelationid(String correlationid) {
this.correlationId = correlationid;
}
public String getCorrelationValue() {
return correlationValue;
}
public void setCorrelationValue(String correlationValue) {
this.correlationValue = correlationValue;
}
@XmlElement(name = "v41:ispId")
public String getIspId() {
return ispId;
}
public void setIspId(String ispId) {
this.ispId = ispId;
}
@XmlElement(name = "v41:returnSpeedAtNok")
public String getReturnSpeekAtNok() {
return returnSpeekAtNok;
}
public void setReturnSpeekAtNok(String returnSpeekAtNok) {
this.returnSpeekAtNok = returnSpeekAtNok;
}
@XmlElement(name = "v41:basisContrEleId")
public String getBasisContrEleId() {
return basisContrEleId;
}
public void setBasisContrEleId(String basisContrEleId) {
this.basisContrEleId = basisContrEleId;
}
@XmlElement(name = "v41:contrEleId")
public String getContrEleId() {
return contrEleId;
}
public void setContrEleId(String contrEleId) {
this.contrEleId = contrEleId;
}
@XmlElement(name = "v41:bbType")
public String getBbType() {
return bbType;
}
public void setBbType(String bbType) {
this.bbType = bbType;
}
@XmlElement(name = "v41:dnType")
public String getDnType() {
return dnType;
}
public void setDnType(String dnType) {
this.dnType = dnType;
}
@XmlElement(name = "v41:qualifExtRef")
public String getQualifExtRef() {
return qualifExtRef;
}
public void setQualifExtRef(String qualifExtRef) {
this.qualifExtRef = qualifExtRef;
}
@Override
public String toString() {
return "WSGRequest{" +
"ispId='" + ispId + '\'' +
", returnSpeekAtNok='" + returnSpeekAtNok + '\'' +
", basisContrEleId='" + basisContrEleId + '\'' +
", contrEleId='" + contrEleId + '\'' +
", bbType='" + bbType + '\'' +
", dnType='" + dnType + '\'' +
", qualifExtRef='" + qualifExtRef + '\'' +
", correlationId='" + correlationId + '\'' +
", correlationValue='" + correlationValue + '\'' +
'}';
}
/***** STATIC CLASS ADDRESS ******/
/*
public static class Address {
private String street;
private String housenr;
private String zip;
private String city;
public Address(String street, String housenr, String zip, String city) {
setStreet(street);
setHousenr(housenr);
setZip(zip);
setCity(city);
}
public Address(){
}
@XmlElement(name = "v41:street")
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@XmlElement(name = "v41:houseNr")
public String getHousenr() {
return housenr;
}
public void setHousenr(String housenr) {
this.housenr = housenr;
}
@XmlElement(name = "v41:zip")
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
@XmlElement(name = "v41:city")
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"street='" + street + '\'' +
", housenr=" + housenr +
", zip=" + zip +
", city='" + city + '\'' +
'}';
}
/*** FINE STATIC CLASS ADDRESS *****/
}
我需要得到这个输出:
<v41:srvQualifByAddress>
<v41:request correlationId="test">
<v41:ispId>x</v41:ispId>
<v41:returnSpeedAtNok>x</v41:returnSpeedAtNok>
<v41:basisContrEleId>x</v41:basisContrEleId>
<v41:contrEleId>x</v41:contrEleId>
<v41:bbType>x</v41:bbType>
<v41:dnType>x</v41:dnType>
<v41:qualifExtRef>x</v41:qualifExtRef>
<v41:address>
<v41:street>x</v41:street>
<v41:houseNr>x</v41:houseNr>
<v41:zip>x</v41:zip>
<v41:city>x</v41:city>
</v41:address>
</v41:request>
</v41:srvQualifByAddress>
这是我在“主”部分的代码的一部分
我想要的是一个字符串,它包含我上面发布的XML调用,可能在构造函数中有一个Address对象。在您的
WSGRequest
类中当前没有Address
字段,您到底尝试了什么?有,但它们像注释,因为否则代码会给我一个错误。我尝试过XmlElementWrapper类,但没有成功。我还尝试将make Address作为WSGRequest(地址类的getter)中的一个XmlElement。现在为了避免这个问题,我将把地址字段放在WSGRequest中,但不是作为类,而是作为字段。但这不是我想要的工作方式,这将是太多的硬代码和静态。我已经解决了这个问题。我刚刚使用索引of和子字符串将address类生成的XML插入请求中。:)
public static String requestJaxObjectToXML(WSGRequest request){
try{
//CREATE JAXB Context
JAXBContext jaxbContext = JAXBContext.newInstance(WSGRequest.class);
//Create Marshaller
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
/*Required Formatting?*/
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
//Print XML String to Console
StringWriter sw = new StringWriter();
//Write XML to Stringwriter
jaxbMarshaller.marshal(request, sw);
String xmlContent = sw.toString();
return xmlContent;
}
catch(JAXBException e){
//return e.getCause().toString();
return "ERROR!";
}
}
WSGRequest request = new WSGRequest("100032", "true", "110", "100", "2", "1", "#myTicId", "test");
String completeRequest = requestJaxObjectToXML(request);