Java 无法使用JAXB封送XBRL实例

Java 无法使用JAXB封送XBRL实例,java,jaxb,jaxb2,xbrl,Java,Jaxb,Jaxb2,Xbrl,我正在尝试使用JAXB创建一个XBRL实例。我可以基于xbrl实例模式()使用xjc成功创建java模型 当使用xjc创建java类时,我遵循了本文的建议(maven部分除外,因为我没有使用它): xbrl_bindings.xjb: 因此,现在我试图生成一个XBRL实例,但在初始化上下文时得到了Java.lang.IllegalArgumentException。我发现另一篇文章建议通过引用包和ObjectFactory(使用classloader)来调用newInstance()。但是仍

我正在尝试使用JAXB创建一个XBRL实例。我可以基于xbrl实例模式()使用xjc成功创建java模型

当使用xjc创建java类时,我遵循了本文的建议(maven部分除外,因为我没有使用它):

xbrl_bindings.xjb:

因此,现在我试图生成一个XBRL实例,但在初始化上下文时得到了Java.lang.IllegalArgumentException。我发现另一篇文章建议通过引用包和ObjectFactory(使用classloader)来调用newInstance()。但是仍然会发生错误,我无法从stacktrace中提取任何有用的信息

编组代码:
公共类jaxbxbrinstancecreationtest{
公共静态void main(字符串[]args){
org.xbrl._2003.instance.ObjectFactory instObjFact=new ObjectFactory();
Xbrl Xbrl=instObjFact.createXbrl();
xbrl.setId(“测试”);
org.xbrl._2003.linkbase.ObjectFactory linkbaseObjFact=new org.xbrl._2003.linkbase.ObjectFactory();
org.xbrl._2003.xlink.ObjectFactory xlinkObjFact=新org.xbrl._2003.xlink.ObjectFactory();
org.xbrl._2003.xlink.SimpleType schemaRefvalue=xlinkObjFact.createSimpleType();
schemaRefvalue.setHref(“http://eiopa.europa.eu/eu/xbrl/s2md/fws/solvency/solvency2/2014-07-23/mod/ars.xsd");
setType(“简单”);
List schemaRefList=xbrl.getSchemaRef();
schemaRefList.add(linkbaseObjFact.createSchemaRef(schemaRefvalue.getValue());
List contextList=xbrl.getItemOrTupleOrContext();
Context Context=instObjFact.createContext();
context.setId(“context”);
ContextEntityType entityType=instObjFact.createContextEntityType();
标识符=新标识符();
标识符。设置值(“某人”);
标识符。设置模式(“http://www.example.com");
entityType.setIdentifier(标识符);
setEntity(entityType);
ContextPeriodType ContextPeriodType=instObjFact.createContextPeriodType();
contextPeriodType.setInstant(“2014-02-28”);
setPeriod(contextPeriodType);
ContextScenarioType ContextScenarioType=instObjFact.createContextScenarioType();
context.setScenario(contextScenarioType);
添加(上下文);
试一试{
//JAXBContext JAXBContext=JAXBContext.newInstance(Xbrl.class,org.Xbrl._2003.instance.ObjectFactory.class);
JAXBContext JAXBContext=JAXBContext.newInstance(“org.xbrl._2003.instance”,org.xbrl._2003.instance.ObjectFactory.class.getClassLoader());
Marshaller=jaxbContext.createMarshaller();
setProperty(marshaller.JAXB_格式的_输出,Boolean.TRUE);
marshaller.marshall(xbrl,新文件输出流(“C:/Users/peter.goldenbogen/Desktop/test.xbrl”);
}捕获(JAXBEException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
堆栈跟踪: 线程“main”java.lang.IllegalArgumentException中的异常:无法分析参数编号:“{0}” 位于java.text.MessageFormat.makeFormat(未知源) 位于java.text.MessageFormat.applyPattern(未知源) 位于java.text.MessageFormat。(未知源) 位于java.text.MessageFormat.format(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.Messages.format(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.ReferencePropertyInfoImpl.calcTypes(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.ReferencePropertyInfoImpl.link(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.ClassInfo.link(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.RuntimeClassInfo.link(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.link(未知源) 位于com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.link(未知源) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(未知源) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl。(未知源) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl。(未知源) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(未知源) 位于com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知源) 位于com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知源) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于javax.xml.bind.ContextFinder.newInstance(未知源) 位于javax.xml.bind.ContextFinder.newInstance(未知源) 位于javax.xml.bind.ContextFinder.find(未知源) 位于javax.xml.bind.JAXBContext.newInstance(未知源) 位于javax.xml.bind.JAXBContext.newInstance(未知源) 位于de.sample.test.jaxbxbrinstancecreationtest.main(jaxbxbrinstancecreationtest.java:76) 原因:java.lang.NumberFormatException:对于输入字符串:“{0}” 位于java.lang.NumberFormatException.forInputString(未知源) 位于java.lang.Integer.parseInt(未知源) 位于java.lang.Integer.parseInt(未知源) ... 还有27个
我可以通过发现实际堆栈跟踪由于翻译jaxb错误消息时出现的已知错误而产生误导来解决我的问题。请看这里:

毕竟,我的jaxb上下文调用仍然存在一个问题,我通过引用一个由冒号分隔的字符串中的所有包来解决这个问题

JAXBContext jaxbContext = JAXBContext.newInstance("org.xbrl._2003.instance:org.xbrl._2003.linkbase:org.xbrl._2003.xlink");
编辑:public class JaxbXbrlInstanceCreationTest { public static void main(String[] args) { org.xbrl._2003.instance.ObjectFactory instObjFact = new ObjectFactory(); Xbrl xbrl = instObjFact.createXbrl(); xbrl.setId("Test"); org.xbrl._2003.linkbase.ObjectFactory linkbaseObjFact = new org.xbrl._2003.linkbase.ObjectFactory(); org.xbrl._2003.xlink.ObjectFactory xlinkObjFact = new org.xbrl._2003.xlink.ObjectFactory(); org.xbrl._2003.xlink.SimpleType schemaRefvalue = xlinkObjFact.createSimpleType(); schemaRefvalue.setHref("http://eiopa.europa.eu/eu/xbrl/s2md/fws/solvency/solvency2/2014-07-23/mod/ars.xsd"); schemaRefvalue.setType("simple"); List<SimpleType> schemaRefList = xbrl.getSchemaRef(); schemaRefList.add(linkbaseObjFact.createSchemaRef(schemaRefvalue).getValue()); List<Object> contextList = xbrl.getItemOrTupleOrContext(); Context context = instObjFact.createContext(); context.setId("Context"); ContextEntityType entityType = instObjFact.createContextEntityType(); Identifier identifier = new Identifier(); identifier.setValue("someone"); identifier.setScheme("http://www.example.com"); entityType.setIdentifier(identifier); context.setEntity(entityType); ContextPeriodType contextPeriodType = instObjFact.createContextPeriodType(); contextPeriodType.setInstant("2014-02-28"); context.setPeriod(contextPeriodType); ContextScenarioType contextScenarioType = instObjFact.createContextScenarioType(); context.setScenario(contextScenarioType); contextList.add(context); try { //JAXBContext jaxbContext = JAXBContext.newInstance(Xbrl.class, org.xbrl._2003.instance.ObjectFactory.class); JAXBContext jaxbContext = JAXBContext.newInstance("org.xbrl._2003.instance", org.xbrl._2003.instance.ObjectFactory.class.getClassLoader()); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); marshaller.marshal( xbrl, new FileOutputStream( "C:/Users/peter.goldenbogen/Desktop/test.xbrl" ) ); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Exception in thread "main" java.lang.IllegalArgumentException: can't parse argument number: ''{0}''
    at java.text.MessageFormat.makeFormat(Unknown Source)
    at java.text.MessageFormat.applyPattern(Unknown Source)
    at java.text.MessageFormat.<init>(Unknown Source)
    at java.text.MessageFormat.format(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.Messages.format(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ReferencePropertyInfoImpl.calcTypes(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ReferencePropertyInfoImpl.link(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ClassInfoImpl.link(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeClassInfoImpl.link(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.link(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.link(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at de.sample.test.JaxbXbrlInstanceCreationTest.main(JaxbXbrlInstanceCreationTest.java:76)
Caused by: java.lang.NumberFormatException: For input string: "''{0}''"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    ... 27 more
JAXBContext jaxbContext = JAXBContext.newInstance("org.xbrl._2003.instance:org.xbrl._2003.linkbase:org.xbrl._2003.xlink");
Locale.setDefault(Locale.ENGLISH);` 
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
There's no ObjectFactory with an @XmlElementDecl for the element {http://www.xbrl.org/2003/linkbase}footnoteLink.
    this problem is related to the following location:
        at protected java.util.List org.xbrl._2003.instance.Xbrl.itemOrTupleOrContext
        at org.xbrl._2003.instance.Xbrl