Статьи

Hello World с архитектурой Java для привязки XML

JAXB (Java Architecture для привязки XML) предоставляет функциональные возможности для чтения или записи XML из файла. Поскольку XML везде используется в Java, это полезно. Здесь я предполагаю, что у вас есть некоторые знания по XML.

Что вы должны иметь

1. JAXB 

Загрузите его и добавьте   папку bin в ваш classpath. Я использовал Eclipse в качестве IDE.

Давайте начнем…

1. Создайте проект в Eclipse под названием JAXB.

2. Создайте каталог библиотеки и скопируйте туда все файлы JAXB. (давайте назовем его » lib «)

3. Добавьте lib в путь сборки.

4. У вас должен быть файл определения схемы XML, поэтому давайте создадим его. Давайте назовем это GSCProfile.xsd

5. Скопируйте следующий контент в файл схемы.

GSCProfile.xsd

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/GSCProfile" xmlns:tns="http://www.example.org/GSCProfile" elementFormDefault="qualified">

<complexType name="GSC">
<sequence>
<element name="Name" type="string"></element>
<element name="Rating" type="int"></element>
</sequence>
</complexType>

<complexType name="Profile">
<sequence>
<element name="ProfileName" type="string"></element>
<element name="GSCElements" type="tns:GSC" maxOccurs="14" minOccurs="14"></element>
</sequence>
</complexType>

<complexType name="GSCProfiles">
<sequence>
<element name="Profile" type="tns:Profile" maxOccurs="unbounded" minOccurs="1"></element>
</sequence>
</complexType>

</schema>

Здесь у нас есть три сложных типа, называемых,

1.GSCProfiles

2.Profile

3.GSC

GSCProfiles является корнем всех. вот как идут отношения, 

GSCProfiles — <Профиль — <GSC

После того как вы добавили папку bin в classpath, перейдите в папку src вашего проекта из командной строки и
введите следующую команду:
xjc -d binding -p com.jaxb.gsc GSCProfiles.xsd

Это создаст несколько классов в вышеупомянутом пакете ( com.jaxb.gsc ) по одному классу для каждого сложного типа и фабрики объектов и класса информации о пакете.

Создайте другой класс с именем JAXBTest   в другом пакете, назовем его com.jaxb.test

JAXBTest.java

Создайте эту переменную на уровне класса. и переменная для хранения имени файла XML.

private static Map<String, Map<String, String>> gscProfileMap = new HashMap<String, Map<String, String>>();
/**
* Output xml file name.
*/
private static File xmlFile = new File("xml/GSCProfile.xml");

1. Создайте метод с именем saveGSCProfiles и добавьте туда следующие фрагменты кода. этот метод сохранит контент для него.

public static void saveGSCProfiles() {
try {
Map<String, String> gscValueMap = new HashMap<String, String>();

// Adding GSC Elements

gscValueMap.put("Data Communications", "0");
gscValueMap.put("Distributed Data Processing", "0");
gscValueMap.put("Performance", "0");
gscValueMap.put("Heavily Used Configuration", "0");
gscValueMap.put("Transaction Rate", "0");
gscValueMap.put("Online Data Entry", "0");
gscValueMap.put("End User Efficiency", "0");
gscValueMap.put("Online Update", "0");
gscValueMap.put("Complex Processing", "0");
gscValueMap.put("Reusability", "0");
gscValueMap.put("Installation Ease", "0");
gscValueMap.put("Operational Ease", "0");
gscValueMap.put("Multiple Sites", "0");
gscValueMap.put("Facilitate Change", "0");
gscProfileMap.put("ProfileName", gscValueMap);
Set<String> pofileNames = gscProfileMap.keySet();

ObjectFactory factory = new ObjectFactory();

GSCProfiles gscProfiles = factory.createGSCProfiles();

for (String profileKey : pofileNames) {

Profile profile = factory.createProfile();

// Setting profile name.

profile.setProfileName(profileKey);
gscValueMap = gscProfileMap.get(profileKey);
Set<String> gscSet = gscValueMap.keySet();

for (String gscKey : gscSet) {

GSC gsc = factory.createGSC();
gsc.setName(gscKey);
gsc.setRating(Integer.parseInt(gscValueMap.get(gscKey)));
profile.getGSCElements().add(gsc);
}

gscProfiles.getProfile().add(profile);

}

JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.gsc");

// Creating marshaller.
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

FileOutputStream outputStream = new FileOutputStream(xmlFile);

// Marshalling object in to the XML file.

marshaller.marshal(gscProfiles, outputStream);

} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

2. Создайте другой метод для чтения из файла XML. давайте назовем это как loadGSCProfiles    

public static void loadGSCProfiles() {
try {

JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.gsc");

// Create unmarshaller.
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

GSCProfiles gscProfiles = (GSCProfiles) unmarshaller.unmarshal(xmlFile);

// Retrieving list of profiles.
List<Profile> profile = gscProfiles.getProfile();

for (Profile profile2 : profile) {

Map<String, String> gscValueMap = new HashMap<String, String>();

List<GSC> gsc = profile2.getGSCElements();

for (GSC gsc2 : gsc) {
gscValueMap.put(gsc2.getName(), gsc2.getRating() + "");
}

gscProfileMap.put(profile2.getProfileName(), gscValueMap);
}
} catch (JAXBException e) {
e.printStackTrace();
}

Создайте каталог внутри вашего проекта Eclipse, назовите его xml и создайте xml-файл с именем  GSCProfile.xml

 Наконец, ваша структура каталогов проекта Eclipse должна выглядеть следующим образом

 Структура каталогов Eclipse