2017-02-03 9 views
4

Намерение вопроса такое же, как и в this SO question, за исключением того, что я пытаюсь достичь без использования JAXB. Но да, используя отражение, которое использует JAXB.Преобразование XML в существующий Java-компонент с использованием отражения (не JAXB)

Я стараюсь не использовать JAXB, потому что у меня есть предопределенный bean-компонент, и когда XML предоставляется, я должен получить соответствующие классы и сеттеры для заполнения компонента.

XML - это только источник данных, мне нужно вытащить любые данные для компонента.

Я пробовал и добился успеха для менее сложного XML. Но неудача для сложных, таких как ниже.

<Response> 
    <Result> 
     <Result_Flag>2</Result_Flag> 
     <Result_Code>1000</Result_Code> 
     <Result_Message>Failure</Result_Message> 
     <Result_Description>Just for fun2</Result_Description> 
    </Result> 
    <Remits> 
     <OR> 
      <I_Number>40002829</I_Number> 
      <OrderNumber>agdfsg</OrderNumber> 
      <Agents> 
       <number>y</number> 
       <Agent> 
        <name>a</name> 
        <id>1</id> 
        <phone> 
         <number>9424648525</number> 
         <network>AIRTEL1</network>        
        </phone> 
        <phone> 
         <number>9424648525</number> 
         <network>AIRTEL1</network>        
        </phone> 
       </Agent> 
       <Agent> 
        ....similar data... 
       </Agent> 
      </Agents> 
     </OR> 
     <OR> 
      <I_Number>40004213</I_Number> 
      <OrderNumber>fgrtey</OrderNumber> 
      <Agents> 
       <number>z</number> 
       <Agent> 
        <name>c</name> 
        <id>2</id> 
        <phone> 
         <number>9424645555</number> 
         <network>AIRCEL1</network>        
        </phone> 
        <phone> 
         <number>9424645555</number> 
         <network>AIRCEL2</network>        
        </phone> 
        <I_Number>40002829</I_Number> 
       </Agent> 
       <Agent> 
        ....similar data... 
       </Agent> 
      </Agents> 
     </OR> 
    </Remits> 
</Response> 

В приведенных выше XML массива элементов ИЛИ, Агент, телефон

Вот соответствующие бобы ...

public class SampleBean { 
    private String responseCode; 
    private String responseMessage; 
    private ArrayList<OR> records; 
    private String txnId; 
} 

public class OR{ 
    private String txnId; 
    private String orderNumber; 
    private String numberOfAgents; 
    private ArrayList<Agent> otherAgents; 
} 

public class Agent { 
    private String agentName; 
    private String agentId; 
    private ArrayList<Phone> agentPhoneDetails; 
} 

public class Phone { 
    private String agentPhoneNumber; 
    private String agentPhoneNetwork; 
} 

Я попытался с помощью отражения и не удалось реализовать. Надеясь, что кто-то пробовал бы это ... Если вы знаете какую-либо такую ​​реализацию, пожалуйста, помогите.

ПРИМЕЧАНИЕ: Не используя JAXB

ответ

0

Я думаю, что вы можете использовать XStream, это библиотека для преобразования данных XML в класс Java и другим способом. очень проста в использовании.

http://x-stream.github.io/tutorial.html здесь учебник.

Я использовал для более сложной структуры и отлично работает.

+0

Спасибо за ответ. Но я не ищу конверсии в одиночку. У меня есть существующий компонент, и я хочу, чтобы данные XML были заполнены в соответствующих полях. – Vamsidhar

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

  • Нет связанных вопросов^_^