xml文字列にマーシャリングしようとしているXMLGregorianCalendarオブジェクトがあります。私は別のXMLオブジェクトをアンマーシャリングすることによってこのオブジェクトを受け取りました。どちらも "dateTime"タイプなので、まったく同じである必要があります。JAXB時刻を指定しないと空白になる時刻
まだ、私がマーシャリングすると、xmlに空白が表示されます。
この問題を説明するために、私は裸の骨まですべてを取り除き、一般化しましたin this example here。 2つのJavaファイル、コピー、貼り付け、そのまま実行残念ながら、それは返し、
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TheObject>
<DOB>2016-09-16</DOB>
</TheObject>
:しかし
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TheObject>
<DOB></DOB>
</TheObject>
注:ペーストビンの例では、私はその場でたXMLGregorianCalendarを作成するのではなく1をつかむあなたが受けるべき出力は以下のようになります下のコードのような別のオブジェクトから、技術的には同じものではありませんが、私は最終的に同じ問題を正確に示していると思います...
私の特定の問題にDDよりコンテキスト:これはバグのいくつかの種類である:
//Here are the objects themselves (names changed to protect the innocent)
//complete with annotations...
public class Object1{
...
@XmlElement(name = "DOB")
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar dob;
...
}
public class Object2{
...
@XmlElement(name = "DOB")
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar dob;
...
}
//and here's the snippet where the date object(date of birth) gets set
//from one object to another.
object2.setDOB(object1.getDOB());
//and finally, marshalling it to an xml string
private String marshallTheObject(Object2 theObject) throws JAXBException{
JAXBContext jaxbContext = JAXBContext.newInstance(Object2.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(object2, sw);
String output = sw.toString();
return output;
}
//the xml output shows: <DOB></DOB> instead of the date
は私が8をJavaのJAXBのバージョンを使用していますが
だから私の質問をされています...がバンドルされていますか?もしそうでなければ、私は何が間違っているのですか?生成されたJavaコードを変更することなくこの問題を回避するにはどうすればよいですか?私は...
編集をどちらか、それを生成するために使用されるXSDファイルを編集することはできません。参考のために、XSDファイルとしてDOBを示しています
<xs:element name="DOB" type="xs:dateTime" />
エキスパートが必要ではないかもしれませんが、XSDも投稿します。 –
xsdファイルから関連するスニペットを追加しました。ペーストビンの例では、複雑さの問題は完全には解消されていません。 – Hylianux