2013-07-19 2 views
2

У меня есть XML из SharePoint (getListItems) без shema (используется JAXB без @XmlRootElement). Я должен создавать объекты из этого XML и использовать unmarshall (JAXB). Все экзамены, которые я видел, - это шема. Можете ли вы мне помочь или привести пример?Как разбор XML (RowsetSchema) для использования JAXB unmarshalling в JAVA

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<GetListItemsResult xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <listitems xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> 
     <rs:data ItemCount="5"> 
      <z:row ows_Attachments="0" ows_Created="2013-07-17 12:20:14" ows_Created_x0020_Date="1;#2013-07-17 12:20:14" ows_FSObjType="1;#0" ows_FileLeafRef="1;#1_.000" ows_FileRef="1;#Lists/000/1_.000" ows_ID="1" ows_LinkTitle="H1 2013" ows_MetaInfo="1;#" ows_Modified="2013-07-17 12:20:14" ows_PermMask="0x7fffffffffffffff" ows_Title="H1 2013" ows_UniqueId="1;#{DD5DFA68-42E1-47BC-BBE3-9921D6093EB2}" ows__Level="1" ows__ModerationStatus="0" ows_owshiddenversion="1"/> 
      <z:row ows_Attachments="0" ows_Created="2013-07-17 12:20:20" ows_Created_x0020_Date="2;#2013-07-17 12:20:20" ows_FSObjType="2;#0" ows_FileLeafRef="2;#2_.000" ows_FileRef="2;#Lists/000/2_.000" ows_ID="2" ows_LinkTitle="H1 2014" ows_MetaInfo="2;#" ows_Modified="2013-07-17 12:20:20" ows_PermMask="0x7fffffffffffffff" ows_Title="H1 2014" ows_UniqueId="2;#{48F0F5E2-3DC6-4C7C-901A-5F33834DA619}" ows__Level="1" ows__ModerationStatus="0" ows_owshiddenversion="1"/> 
      <z:row ows_Attachments="0" ows_Created="2013-07-17 12:20:25" ows_Created_x0020_Date="3;#2013-07-17 12:20:25" ows_FSObjType="3;#0" ows_FileLeafRef="3;#3_.000" ows_FileRef="3;#Lists/000/3_.000" ows_ID="3" ows_LinkTitle="H1 2015" ows_MetaInfo="3;#" ows_Modified="2013-07-17 12:20:25" ows_PermMask="0x7fffffffffffffff" ows_Title="H1 2015" ows_UniqueId="3;#{40136C41-B7DA-42E4-B733-1B569C0AFEEB}" ows__Level="1" ows__ModerationStatus="0" ows_owshiddenversion="1"/> 
      <z:row ows_Attachments="0" ows_Created="2013-07-18 17:05:48" ows_Created_x0020_Date="7;#2013-07-18 17:05:48" ows_FSObjType="7;#0" ows_FileLeafRef="7;#7_.000" ows_FileRef="7;#Lists/000/7_.000" ows_ID="7" ows_LinkTitle="Michael Drummond" ows_MetaInfo="7;#" ows_Modified="2013-07-18 17:05:48" ows_PermMask="0x7fffffffffffffff" ows_Title="Michael Drummond" ows_UniqueId="7;#{057BB0DD-DA6F-45A4-8B85-809E09E79149}" ows__Level="1" ows__ModerationStatus="0" ows_owshiddenversion="1"/> 
      <z:row ows_Attachments="0" ows_Created="2013-07-18 17:22:35" ows_Created_x0020_Date="8;#2013-07-18 17:22:35" ows_FSObjType="8;#0" ows_FileLeafRef="8;#8_.000" ows_FileRef="8;#Lists/000/8_.000" ows_ID="8" ows_LinkTitle="Michael Drummond" ows_MetaInfo="8;#" ows_Modified="2013-07-18 17:22:35" ows_PermMask="0x7fffffffffffffff" ows_Title="Michael Drummond" ows_UniqueId="8;#{8E6F9D85-E360-41E8-87F8-65D071FE39AC}" ows__Level="1" ows__ModerationStatus="0" ows_owshiddenversion="1"/> 
</rs:data> 
</listitems> 
</GetListItemsResult> 
+0

Почему бы вам не использовать XML-схемы? Sharepoint публикует WSDL из коробки. Просто используйте http: // [ваш-сервер] /your-site/_vti_bin/Lists.asmx?WSDL, чтобы извлечь схему и использовать ее в JAXB. Кроме того, вы можете запустить wsdl2java на этом - он создаст привязки java (JAXB) для вас. –

+0

Я сделал это. Я exctracted мой WSDL через maven. чем 'ListSoap port = sharePointListsAuth (имя_пользователя, пароль); GetListItemsResponse.GetListItemsResult result = port.getListItems ("000", "", null, null, "", null, ""); JAXBXMLHandler.marshal (результат, новый файл («GetListItemsResult.xml»)); ' – Sergey

ответ

2

Для примера, есть несколько факторов, которые необходимо учитывать в пространствах имен и коллекций.

Namespaces

Вы можете использовать уровень пакета @XmlSchema аннотацию для установки квалификации пространства имен по умолчанию. Затем, поскольку имеется несколько пространств имен, вы можете использовать параметр namespace на @XmlType, @XmlElement и @XmlElementWrapper, чтобы при необходимости изменить значение по умолчанию.

Коллекция

По умолчанию реализация JAXB не добавит группирования элемента для свойств коллекции это может быть сделана с @XmlElementWrapper аннотацию.

+0

Спасибо. Но я не могу изменить пространство имен в моем wsdl. И мой наставник сказал, что объекты для управления данными в списке из полученного файла (XML). – Sergey

+0

@ user1560783 - Я не хотел менять пространства имен в WSDL. Я просто имел в виду, что в вашем XML есть несколько пространств имен, и вам нужно будет учитывать это в ваших метаданных JAXB. –

Смежные вопросы