2017-08-29 5 views
0

Ceci est mon XML que je veux démasquer (je n'ai pas XSD pour cela). Et je dois démarshal pour obtenir un tableau de noms et d'ID. Ainsi, les noms sont générés très bien, mais le problème est avec les ID. Les ID sont définis sur null. Quelqu'un peut-il m'aider s'il vous plaît à identifier le problème?Obtention de la valeur Null sur un élément de type complexe à l'aide de Moxy JAXB

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" typeLanguage="http://www.w3.org/2001/XMLSchema"> 
    <bpmn:collaboration id="Collaboration_0b6zt1k" isClosed="false"> 
    <bpmn:participant id="Participant_113vq9r" processRef="CallActivity_00qe833" /> 
    </bpmn:collaboration> 
    <bpmn:process id="CallActivity_00qe833" isClosed="false" isExecutable="true" name="Some Text" processType="None"> 
    <bpmn:serviceTask activiti:class="Assign PC" completionQuantity="1" id="ServiceTask_0ip6tj7" implementation="##WebService" isForCompensation="false" name="Some Text 1" startQuantity="1"> 
     <bpmn:extensionElements> 
     <activiti:properties> 
      <activiti:property name="specKey" value="ServiceTask_0ip6tj7" /> 
     </activiti:properties> 
     </bpmn:extensionElements> 
     <bpmn:incoming>SequenceFlow_0sa9y9o</bpmn:incoming> 
     <bpmn:outgoing>SequenceFlow_1bd3qmp</bpmn:outgoing> 
    </bpmn:serviceTask> 
    <bpmn:serviceTask activiti:class="generateURL" completionQuantity="1" id="ServiceTask_11t11da" implementation="##WebService" isForCompensation="false" name="Some Text 2" startQuantity="1"> 
     <bpmn:extensionElements> 
     <activiti:properties> 
      <activiti:property name="specKey" value="ServiceTask_11t11da" /> 
     </activiti:properties> 
     </bpmn:extensionElements> 
     <bpmn:incoming>SequenceFlow_1bd3qmp</bpmn:incoming> 
     <bpmn:outgoing>SequenceFlow_0cynzzs</bpmn:outgoing> 
    </bpmn:serviceTask> 
    <bpmn:serviceTask activiti:class="generateURL" completionQuantity="1" id="ServiceTask_11t11da" implementation="##WebService" isForCompensation="false" name="Some Text 3" startQuantity="1"> 
     <bpmn:extensionElements> 
     <activiti:properties> 
      <activiti:property name="specKey" value="ServiceTask_11t11da" /> 
     </activiti:properties> 
     </bpmn:extensionElements> 
     <bpmn:incoming>SequenceFlow_1bd3qmp</bpmn:incoming> 
     <bpmn:outgoing>SequenceFlow_0cynzzs</bpmn:outgoing> 
    </bpmn:serviceTask> 
    </bpmn:process> 
</bpmn:definitions> 

Ceci est mon JAXB classe annotée:

package XMLToObject; 

    import java.util.List; 
    import javax.xml.bind.annotation.XmlAccessType; 
    import javax.xml.bind.annotation.XmlAccessorType; 
    import javax.xml.bind.annotation.XmlAttribute; 
    import javax.xml.bind.annotation.XmlRootElement; 
    import org.eclipse.persistence.oxm.annotations.XmlPath; 

    @XmlRootElement 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public class definitions { 

     @XmlPath("bpmn:process/bpmn:serviceTask/@name") 
     @XmlAttribute 
     List<String> name; 

     @XmlPath("bpmn:process/bpmn:serviceTask/@id") 
     @XmlAttribute 
     List<String> id; 

     @XmlAttribute 
     String typeLanguage; 

     public List<String> getname() { 

      return name; 
     } 

     public List<String> getid() { 

      return id; 
     } 

     public String gettypeLanguage() { 
      return typeLanguage; 
     } 
    } 

Ceci est mon classe Java:

package XMLToObject; 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author Gauravb 
*/ 
import java.io.File; 
import java.util.Collection; 
import java.util.List; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class XMLToObject { 
public static void main(String[] args) { 
    try {  
      File file = new File("employee.xml");  
      JAXBContext jaxbContext = JAXBContext.newInstance(definitions.class);  
      System.out.println("JAXB....."+jaxbContext.toString()); 
      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
      definitions p = (definitions) jaxbUnmarshaller.unmarshal(file); 
      System.out.println("Task Name:"+p.getname()); 
      System.out.println("Svc ID:"+p.getid()); 
      System.out.println("Type Language:"+p.gettypeLanguage()); 
      } catch (JAXBException e) {e.printStackTrace(); }  

} 
} 

Maintenant, c'est la sortie que je reçois:

run: 
[email protected] 
Task Name:[Some Text 1, Some Text 2, Some Text 3] 
Svc ID:null 
Type Language:http://www.w3.org/2001/XMLSchema 
BUILD SUCCESSFUL (total time: 0 seconds) 

Mon problème est que je reçois Svc ID comme "n ull "quand la même chose fonctionne pour le nom de la tâche.

S'il vous plaît noter: 1. J'utilise Moxy pour JAXB 2. S'il vous plaît noter que lorsque je change la séquence alors les noms sont mis à se null:

@XmlPath("bpmn:process/bpmn:serviceTask/@id") 
@XmlAttribute 
List<String> id; 


@XmlPath("bpmn:process/bpmn:serviceTask/@name") 
@XmlAttribute 
List<String> name; 

Je reçois cette sortie:

run: 
[email protected] 
Task Name:null 
Svc ID:[ServiceTask_0ip6tj7, ServiceTask_11t11da, ServiceTask_11t11da] 
Type Language:http://www.w3.org/2001/XMLSchema 
BUILD SUCCESSFUL (total time: 0 seconds) 

Répondre