我正试图解开那封信camunda:property elements 使用xpath跳过不必要的 Package 器元素。不幸的是,我的propertylist总是空的。它位于任务类中。任何帮助都将不胜感激。
编辑#1:我按照下面的链接,谁应该帮助我的问题不幸没有成功。http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html 这是官方指南。显然,maven pom.xml文件存在一些挑战。我怀疑问题出在pom文件中。我遵循了这个指南https://www.javacodegeeks.com/2012/07/eclipselink-moxy-as-jaxb-provider.html 但还是没能成功。
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>BPMN-Marshaller</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<repositories><repository>
<id>EclipseLink Repo</id>
<url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
<name>EclipseLink Repo</name>
</repository></repositories>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>3.0.0-M1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
</project>
jaxb.properties文件与我的java类位于同一个包和文件夹中(请参阅附带的名为“project structure”的图像)
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
package-info.java文件
@XmlSchema(namespace="http://www.omg.org/spec/BPMN/20100524/MODEL", elementFormDefault=XmlNsForm.QUALIFIED, xmlns = {@XmlNs(prefix="bpmn", namespaceURI="http://www.omg.org/spec/BPMN/20100524/MODEL")
,@XmlNs(prefix = "camunda", namespaceURI = "http://camunda.org/schema/1.0/bpmn")})
package bpmn;
import javax.xml.bind.annotation.*;
xml文件片段
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_13d3a6z" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.1.1">
<bpmn:process id="Process_1tovjba" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_06i118e</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="Activity_1d3friu" name="Task 1">
<bpmn:extensionElements>
<camunda:properties>
<camunda:property name="start_date" value="01-04-2018" />
<camunda:property name="duration" value="5" />
</camunda:properties>
</bpmn:extensionElements>
<bpmn:incoming>Flow_06i118e</bpmn:incoming>
<bpmn:outgoing>Flow_0linmbs</bpmn:outgoing>
</bpmn:task>
定义类
@XmlRootElement
public class Definitions {
private String id;
private Process process;
public Definitions(){};
public Definitions(String id, Process process){
super();
this.id = id;
this.process = process;
}
@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
public Process getProcess() {
return process;
}
public void setProcess(Process process) {
this.process = process;
}
@Override
public String toString(){
return "Definitions [id23=" + id + ", process=23499999999999999" + process + "]";
}
}
进程类
public class Process {
private String id;
private List<Task> taskList;
private List<SequenceFlow> sequenceFlowList;
public Process(){};
public Process(String id, List<Task> taskList, List<SequenceFlow> sequenceFlowList){
super();
this.id = id;
this.taskList = taskList;
this.sequenceFlowList = sequenceFlowList;
}
@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "task")
public List<Task> getTaskList() {
return taskList;
}
public void setTaskList(List<Task> taskList) {
this.taskList = taskList;
}
@XmlElement(name = "sequenceFlow")
public List<SequenceFlow> getSequenceFlowList() {
return sequenceFlowList;
}
public void setSequenceFlowList(List<SequenceFlow> sequenceFlowList) {
this.sequenceFlowList = sequenceFlowList;
}
}
任务类
public class Task {
private String id;
private String name;
private List<Property> propertyList;
public Task(){}
public Task(String id, String name, List<Property> propertyList){
super();
this.id = id;
this.name = name;
this.propertyList = propertyList;
}
@XmlAttribute
@JsonProperty("text")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "property")
@XmlPath("bpmn:extensionElements/camunda:properties/camunda:property")
public List<Property> getPropertyList() {
return propertyList;
}
public void setPropertyList(List<Property> propertyList) {
this.propertyList = propertyList;
}
}
属性类
public class Property {
private String name;
private String value;
public Property(){}
public Property(String name, String value) {
super();
this.name = name;
this.value = value;
}
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlAttribute
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
主要类别
public class XMLToObject {
public static void main(String[] args) {
try {
File file = new File("process.bpmn");
JAXBContext jaxbContext = JAXBContext.newInstance(Definitions.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Definitions definitions = (Definitions) jaxbUnmarshaller.unmarshal(file);
System.out.println(definitions.getProcess().getTaskList().get(0).getPropertyList());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
项目结构
1条答案
按热度按时间yvt65v4c1#
我对你的方法做了以下更改,我可以访问
duration
以及start_date
xml文件中的属性数据。顺便说一下,我用的是openjdk 14。但是使用版本8也可以运行这种方法。
我使用的pom具有以下依赖关系:
(为了这个测试,我跳过了jackson依赖项。)
我还在pom的末尾添加了以下部分来处理属性文件:
这可以确保属性文件与其相关的类文件一起部署到正确的位置。
我添加了代码来检查使用的是哪个jaxb提供程序—这是一个肯定的确认:
我对代码进行了修改,以循环遍历属性数据,从而显式打印最终的属性值:
结果输出为: