Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以查看JAXB分析的对象图?_Java_Groovy_Jaxb_Object Graph - Fatal编程技术网

Java 是否可以查看JAXB分析的对象图?

Java 是否可以查看JAXB分析的对象图?,java,groovy,jaxb,object-graph,Java,Groovy,Jaxb,Object Graph,我有一个现有的复杂对象模型,我正试图将其转换为JAXBXML。如果可能的话,我不想更改任何现有的域类。我有一段代码正在处理,以便将其打包成一个文件(使用Groovy) 问题是对象图非常复杂,JAXB告诉我com.sun.istack.internal.SAXException2:在对象图中检测到一个循环。这将导致无限深的XML:com.example。Object@1eef1eb[Id=100053900]->com.example。Object@1eef1eb[Id=100053900] 有没

我有一个现有的复杂对象模型,我正试图将其转换为JAXBXML。如果可能的话,我不想更改任何现有的域类。我有一段代码正在处理,以便将其打包成一个文件(使用Groovy)

问题是对象图非常复杂,JAXB告诉我
com.sun.istack.internal.SAXException2:在对象图中检测到一个循环。这将导致无限深的XML:com.example。Object@1eef1eb[Id=100053900]->com.example。Object@1eef1eb[Id=100053900]

有没有办法获得更多有关检测周期的信息?有人知道有什么工具可以帮助分析图表或以图表的形式列出图表,这样我就可以找出周期了吗?我有一种感觉,在这个图表中有很多循环(它既古老又复杂),所以任何帮助都将不胜感激

或者,您可以告诉JAXB只进行“n”级或类似的操作,这样它就不会创建无限深的XML了吗

编辑:

所以关于我的具体问题。。。原来现有的域对象有一个
对象getThis()
void setThis(object obj)
方法,该方法定义为“获取”和“设置”这个
自引用关键字。这就是导致我的周期的原因。这还强调了一个事实,即JAXB必须使用JavaBean方法定义来确定它将处理哪些属性(我以前不知道)


然而,我认为最初的问题仍然存在,是否有任何好的工具用于分析/查看对象图?

您可以让您的对象实现
cyclererecoverable
界面来查找有关周期的信息

import java.util.*;
import javax.xml.bind.annotation.*;
import com.sun.xml.bind.CycleRecoverable;

@XmlRootElement
public class Department implements CycleRecoverable {

   @XmlAttribute
   public int id;
   public String name;
   public List<Employee> employees = new ArrayList<Employee>();

   public Object onCycleDetected(Context arg0) {
       // Context provides access to the Marshaller being used:
       System.out.println("JAXB Marshaller is: " + cycleRecoveryContext.getMarshaller());

       DepartmentPointer p = new DepartmentPointer();
       p.id = this.id;
       return p;
   }

}
import java.util.*;
导入javax.xml.bind.annotation.*;
导入com.sun.xml.bind.cyclererecoverable;
@XmlRootElement
公共类部门实现CycleRecoverable{
@XmlAttribute
公共int id;
公共字符串名称;
public List employees=new ArrayList();
一次循环检测的公共对象(上下文arg0){
//上下文提供对正在使用的封送拆收器的访问:
println(“JAXB Marshaller是:+cycleRecoveryContext.getMarshaller());
DepartmentPointer p=新的DepartmentPointer();
p、 id=this.id;
返回p;
}
}
了解更多信息


也许您可以引入一种方法来跟踪编组过程并转储对象信息,以便进行诊断。有关详细信息,请参见(引用“外部侦听器”的零件)。这不需要对现有域进行更改

import java.util.*;
import javax.xml.bind.annotation.*;
import com.sun.xml.bind.CycleRecoverable;

@XmlRootElement
public class Department implements CycleRecoverable {

   @XmlAttribute
   public int id;
   public String name;
   public List<Employee> employees = new ArrayList<Employee>();

   public Object onCycleDetected(Context arg0) {
       // Context provides access to the Marshaller being used:
       System.out.println("JAXB Marshaller is: " + cycleRecoveryContext.getMarshaller());

       DepartmentPointer p = new DepartmentPointer();
       p.id = this.id;
       return p;
   }

}