Привет друзья! Как дела?
С тобой когда-нибудь случалось следующее? Однажды утром вы приходите на работу, и ваш начальник говорит вам: «Мне нужно, чтобы вы взяли эти данные и превратили их в XML ». Ну, это уже случилось со мной, и в этом блоге я собираюсь показать вам , как сделать это быстро.
XSD?
Честно говоря, моему начальнику он дал мне XSD-файл, описывающий структуру XML-файла, который меня попросили сгенерировать. Но что такое XSD-файл?
XSD расшифровывается как определение схемы XML. Это всего лишь другой XML-файл известного и канонического формата, который используется для описания структуры другого XML-файла. Например, если я хочу сбросить данные сотрудника в XML, задача XSD состоит в том, чтобы каждый знал, что у сотрудника должно быть имя, адрес, номер социального страхования, что он может занимать несколько должностей в одной организации и и так далее … Но самое главное, он описывает структуру всех этих данных в файле XML.
Вот пример XSD для вашей справки, описывающий XML сотрудников:
<?xml version="1.0" encoding="iso-8859-1"?> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Customer" type="CustomerType" /> <xsd:complexType name="CustomerType"> <xsd:sequence> <xsd:element name="name" type="xsd:string" /> <xsd:element name="address" type="xsd:string" /> <xsd:element name="email" type="xsd:string" /> <xsd:element maxOccurs="unbounded" name="InteractionResource" type="InteractionResourceType" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="InteractionResourceType"> <xsd:sequence> <xsd:element name="name" type="xsd:string" /> <xsd:element name="feed" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
Генерация объектов
Но кого это волнует? Какая польза от файла XSD? Ну, во-первых, ваша IDE, вероятно, использует XSD-файлы для проверки правильности написанных вами XML-файлов (это верно, например, при работе со Spring, Hibernate и, конечно, Mule ESB ). Но это также может быть использовано для автоматического отображения и генерации кода. Что JAXB делает, так это читает XSD-файл, чтобы автоматически генерировать набор классов, которые имитируют структуру XML и позволяют одинаково хранить те же данные. Как только эти классы существуют, JAXB легко может маршалировать данные XML в эти объекты и наоборот.
У JAXB есть терминальная команда, которая берет XSD-файл и превращает его в Java Bean. Эта команда называется XJC и присутствует в папке bin / любой установки JDK, начиная с версии 1.6. Вот пример того, как его использовать:
xjc example.xsd
Приведенная выше команда создаст класс Java с соответствующими аннотациями JAXB для выполнения маршалинга и демаршаллинга XML. Он также создаст второй класс с именем ObjectFactory, который он будет использовать внутри при выполнении преобразований. Вам нужно добавить эти классы в ваш проект. Для простоты предположим, что вы положили их в пакет com.mulesoft.example .
Тогда это всего лишь вопрос заполнения компонента и использования JAXB Transformers Mule для генерации XML. Пример кода выглядит следующим образом:
<!-- give jaxb a package to scan for annotations --> <mulexml:jaxb-context name="myJaxB" packageNames="com.mulesoft.example" /> <sub-flow name="xmlMarshalling"> <!-- sample transformer that would populate your bean --> <expression-transformer expression="new Employee(name:'John Doe', email:'[email protected]')" evaluator="groovy" /> <!-- Generate the XML --> <mulexml:jaxb-object-to-xml-transformer name="myMarshaller" jaxbContext-ref="myJaxB"/> </sub-flow>
Вот и все. Ты только что сделал своего босса счастливым. Вы действительно хотите произвести на него впечатление? Давайте также посмотрим, как вы можете выполнить обратную операцию и преобразовать файл XML в объект Java.
Mule уже предоставляет готовый объект-преобразователь xml из коробки, и в этом случае он будет прекрасно работать, но просто для полноты картины давайте посмотрим, как можно сделать то же самое с помощью JAX.
<sub-flow name="unmarshall"> <mulexml:jaxb-xml-to-object-transformer name="XmlToObject" jaxbContext-ref="myJaxb" returnClass="org.mule.jaxb.Example"/> </sub-flow>
Вот и все! Вы все готово! Теперь покажи это своему боссу и заставь его купить тебе пива!
Нет похожих сообщений.