2011-09-14 9 views
2

私はSprint 3.0.5と、付属のjaxbマーシャラを使用してRESTサービスと通信します。別の会社が提供するサービスはPOSTを介してXMLを自分のサービスに送信し、Javaオブジェクト内のそのXMLを非マーシャルして処理する必要があります。JaxB unmarshal XML with Capital letterタグ

私の問題は、XMLタグは大文字で始まります(それらは変更されません)。したがって、JAXBマーシャラーはオブジェクトを非整列化できません。

XMLは次のようになります。

<Ssm_Packet> 
<Version>1</Version> 
<Protocol_ID>0</Protocol_ID> 
<Packet_Id>{84ca597c-05e2-4357-897c-892f428c35ce}</Packet_Id> 
<Priority>0</Priority> 
<Source_Address>1:11111111111111</Source_Address> 
<Destination_Address>2:LA3222222222222</Destination_Address> 
<Body>Some TExt</Body> 
<Billing /> 
</Ssm_Packet> 

私はJAXBのために定義されたBeanは、次のようになります。

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 


@XmlRootElement(name="Ssm_Packet") 
public class Ssm_Packet { 
@XmlElement(name="Version") 
private String version; 
private String protocol_ID; 
private String packet_Id; 
private String priority; 
private String source_Address; 
private String destination_Address; 
private String body; 
private String billing; 
/** 
* @return the version 
*/ 
public String getVers() { 
    return version; 
} 
/** 
* @param version the version to set 
*/ 
public void setVers(String Version) { 
    this.version = Version; 
} 
/** 
* @return the protocol_ID 
*/ 
public String getProtocol_ID() { 
    return protocol_ID; 
} 
/** 
* @param protocol_ID the protocol_ID to set 
*/ 
public void setProtocol_ID(String Protocol_ID) { 
    this.protocol_ID = Protocol_ID; 
} 
/** 
* @return the packet_Id 
*/ 
public String getPacket_Id() { 
    return packet_Id; 
} 
/** 
* @param packet_Id the packet_Id to set 
*/ 
public void setPacket_Id(String Packet_Id) { 
    this.packet_Id = Packet_Id; 
} 
/** 
* @return the priority 
*/ 
public String getPriority() { 
    return priority; 
} 
/** 
* @param priority the priority to set 
*/ 
public void setPriority(String Priority) { 
    this.priority = Priority; 
} 
/** 
* @return the source_Address 
*/ 
public String getSource_Address() { 
    return source_Address; 
} 
/** 
* @param source_Address the source_Address to set 
*/ 
public void setSource_Address(String Source_Address) { 
    this.source_Address = Source_Address; 
} 
/** 
* @return the destination_Address 
*/ 
public String getDestination_Address() { 
    return destination_Address; 
} 
/** 
* @param destination_Address the destination_Address to set 
*/ 
public void setDestination_Address(String Destination_Address) { 
    this.destination_Address = Destination_Address; 
} 
/** 
* @return the body 
*/ 
public String getBody() { 
    return body; 
} 
/** 
* @param body the body to set 
*/ 
public void setBody(String Body) { 
    this.body = Body; 
} 
/** 
* @return the billing 
*/ 
public String getBilling() { 
    return billing; 
} 
/** 
* @param billing the billing to set 
*/ 
public void setBilling(String Billing) { 
    this.billing = Billing; 
} 
} 

私はJAXBは、そのオブジェクトにXMLを非整列化させた場合、彼は文句を言いませんxmlタグに大文字がない場合を除いて、xmlの値を記入してください。

私のbeanにその値を非マーシャルする方法は誰にでも教えてください。

THX

答えて

3

あなたは、あなたのフィールド/プロパティのそれぞれに対応する要素名を指定する@XmlElementアノテーションを使用することができます。

/** 
* @return the protocol_ID 
*/ 
@XmlElement(name="Protocol_ID") 
public String getProtocol_ID() { 
    return protocol_ID; 
} 

あなたの代わりに自分のフィールドに注釈を付けたい場合は、あなたが@XmlAccessorType(XmlAccessType.FIELD)設定する必要があります。

@XmlRootElement(name="Ssm_Packet") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Ssm_Packet { 
    @XmlElement(name="Version") 
    private String version; 
} 

EclipseLink JAXB (MOXy)はまた、あなたがJavaのフィールド/プロパティを変換するための標準JAXBアルゴリズムをオーバーライドすることができ拡張子が含まれていますXML名に名前:

+0

Thx多くは、私の問題を解決しました。あなたが提供したリンクを今すぐチェックアウトします。 – Florian

関連する問題