Serializacja XML w Javie? [zamknięte]
Co jest analogiem Javy w serializacji XML. NET?
11 answers
2008 odpowiedź "Oficjalnym" API Java dla tego jest teraz JAXB - Java API for XML Binding. Zobacz Tutorial napisany przez Oracle . Implementacja referencyjna żyje na poziomie http://jaxb.java.net/
2018 Update Należy zauważyć, że Moduły Java EE i CORBA są przestarzałe w SE w jdk9 i mają zostać usunięte z Se w JDK11. W związku z tym, aby korzystać z JAXB, musi on znajdować się w istniejącym środowisku klasy korporacyjnej w pakiecie np. z serwerem aplikacji, lub trzeba go przynieść ręcznie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-11 13:10:05
XStream jest całkiem dobry w serializowaniu obiektu do XML bez dużej konfiguracji i pieniędzy! (jest na licencji BSD).
Użyliśmy go w jednym z naszych projektów, aby zastąpić zwykłą starą serializację Javy i zadziałało prawie po wyjęciu z pudełka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-25 12:32:43
Projekt"Simple XML Serialization"
Możesz zajrzeć do projektu Simple XML Serialization . To jest najbliższa rzecz jaką znalazłem do systemu.Xml.Serializacja w .Net.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 20:29:05
JAXB jest częścią JDK standard edition w wersji 1.6+. Tak więc jest to FREE
i nie ma dodatkowych bibliotek do pobrania i zarządzania.
Prosty przykład można znaleźć tutaj
XStream wydaje się być martwy. Last update was on Dec 6 2008.
Simple
wydaje się tak proste i prostsze jak JAXB, ale nie mogłem znaleźć żadnych informacji licencyjnych, aby ocenić go do użytku korporacyjnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-01 08:16:19
Warto wspomnieć, że od wersji 1.4 Java posiadała klasy java.fasola.XMLEncoder i java.fasola.XMLDecoder. Klasy te wykonują kodowanie XML, które jest co najmniej bardzo porównywalne do serializacji XML i w niektórych okolicznościach może zrobić sztuczkę za Ciebie.
Jeśli twoja klasa trzyma się specyfikacji JavaBeans dla getterów i setterów, ta metoda jest prosta w użyciu i nie potrzebujesz schematu. Z następującymi zastrzeżeniami:
- jak w przypadku zwykłej Javy serializacja
- kodowanie i dekodowanie przebiega przez strumień wejściowy i wyjściowy
- proces używa metod familar writeobject i readObject
- w przeciwieństwie do zwykłej serializacji Javy
- kodowanie, ale także dekodowanie powoduje wywołanie konstruktorów i inicjalizatorów
- kodowanie i dekodowanie działa niezależnie od tego, czy Twoja klasa implementuje Serializowalny czy nie
- modyfikatory przejściowe nie są brane pod uwagę
- działa tylko dla klasy publiczne, które mają konstruktory publiczne
Na przykład, weźmy następującą deklarację:
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
Wykonanie tego kodu:
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
Wynikałoby z następującego pliku:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 04:48:15
XMLBeans działa świetnie, jeśli masz schemat dla swojego XML. Tworzy obiekty Java dla schematu i tworzy łatwe w użyciu metody parsowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 11:39:16
Jeśli mówisz o automatycznej serializacji XML obiektów, sprawdź Castor :
Castor jest Open Source data binding framework dla Java [tm]. Jest to najkrótsza ścieżka pomiędzy obiektami Java, dokumentami XML i tabelami relacyjnymi. Castor zapewnia powiązanie Java-to-XML, trwałość Java-to-SQL i wiele innych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 08:49:34
Zwykle używam jaxb lub XMLBeans , jeśli muszę tworzyć obiekty serializowalne do XML. Teraz widzę, że XStream może być bardzo przydatny, ponieważ jest nieinwazyjny i ma naprawdę proste api. Niedługo się nim pobawię i pewnie go użyję. Jedyną wadą, którą zauważyłem, jest to,że nie mogę samodzielnie utworzyć ID obiektu do porównywania.
@Barak Schiller
Dzięki za zamieszczenie linku do XStream!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 11:19:06
Nie zapomnij JiBX .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-29 17:02:14
Jeśli chcesz rozwiązanie strukturalne (Jak ORM), to jaxb2 jest dobrym rozwiązaniem.
Jeśli chcesz serializacji jak DOT NET, możesz użyć długotrwałej trwałości komponentów JavaBeans
Wybór zależy od zastosowania serializacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-31 21:48:19
public static String genXmlTag(String tagName, String innerXml, String properties )
{
return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName);
}
public static String genXmlTag(String tagName, String innerXml )
{
return genXmlTag(tagName, innerXml, "");
}
public static <T> String serializeXML(List<T> list)
{
String result = "";
if (list.size() > 0)
{
T tmp = list.get(0);
String clsName = tmp.getClass().getName();
String[] splitCls = clsName.split("\\.");
clsName = splitCls[splitCls.length - 1];
Field[] fields = tmp.getClass().getFields();
for (T t : list)
{
String row = "";
try {
for (Field f : fields)
{
Object value = f.get(t);
row += genXmlTag(f.getName(), value == null ? "" : value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
row = genXmlTag(clsName, row);
result += row;
}
}
result = genXmlTag("root", result);
return result;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-24 07:59:52