标签: xmlbeans

如何使用XMLBeans XmlObject将节点添加到XML

我的目标是获取XML字符串并使用XMLBeans XmlObject解析它并添加一些子节点.

这是一个示例文档(xmlString),

<?xml version="1.0"?>
<rootNode>
 <person>
  <emailAddress>joefoo@example.com</emailAddress>
 </person>
</rootNode>
Run Code Online (Sandbox Code Playgroud)

这是添加一些节点后我想要XML文档的方式,

<?xml version="1.0"?>
<rootNode>
 <person>
  <emailAddress>joefoo@example.com</emailAddress>
  <phoneNumbers>
   <home>555-555-5555</home>
   <work>555-555-5555</work>
  <phoneNumbers>
 </person>
</rootNode>
Run Code Online (Sandbox Code Playgroud)

基本上,只需添加<phoneNumbers/>两个子节点的节点<home/><work/>.

就我而言,

XmlObject xml = XmlObject.Factory.parse(xmlString);
Run Code Online (Sandbox Code Playgroud)

谢谢

java xml xmlbeans

3
推荐指数
1
解决办法
1万
查看次数

生成器模式与泛型和扩展类上的静态内部工厂

我正在尝试实现构建器模式以生成Apache XmlBeans对象.

我为我的所有类生成了构建器,它继承自:

public abstract class Builder<T extends XmlObject> {

    protected T xmlObject;

    @SuppressWarnings("unchecked")
    public T build() {
        return (T) xmlObject.copy();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了几个这样的构建器(Time2Save继承自XmlObject):

public class Time2SaveBuilder extends Builder<Time2Save> {
    public Time2SaveBuilder(int amount, String unit) {
        xmlObject = Time2Save.Factory.newInstance();
        xmlObject.setUnit(unit);
        xmlObject.setValue(amount);
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但我遇到的问题是我不喜欢在每个构建器中实例化xmlObject的重复,如果可能的话,我宁愿在抽象的Builder类中进行.所以我尝试将此构造函数添加到Builder类:

@SuppressWarnings("unchecked")
public Builder() {
    xmlObject =  (T) T.Factory.newInstance();
}
Run Code Online (Sandbox Code Playgroud)

并留下这样的实现:

public class Time2SaveBuilder extends Builder<Time2Save> {
    public Time2SaveBuilder(int amount, String unit) {
        xmlObject.setUnit(unit);
        xmlObject.setValue(amount);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我收到以下错误:

Exception in thread "main" java.lang.ClassCastException:
    org.apache.xmlbeans.impl.values.XmlAnyTypeImpl cannot be cast …
Run Code Online (Sandbox Code Playgroud)

java generics xmlbeans builder

3
推荐指数
1
解决办法
2097
查看次数

XML-BEANS编译模式:无法找到已编译的模式资源schemaorg_apache_xmlbeans/system/sE130CAA0A01A7CDE5A2B4FEB8B311707/index.xsb

我正在编写一个应用程序来将数据导出到Excel工作表.

我不会使用XSSFWorkbook类,因为我的Excel超过了HSSFWorkbook类的255列限制.

我下载了Apache POI库,并将以下库包含在我的proyect中: - poi-3.9.jar - poi-excelant-3.9.jar - poi-ooxml-3.9.jar - poi-ooxml-schemas-3.9.jar - poi -scratchpad-3.9.jar - dom4j-1.6.1.jar - stax-api-1.0.1.jar - xmlbeans-2.3.0.jar

当我导出数据以获取Excel工作表时,我得到此运行时错误:

java.lang.ExceptionInInitializerError
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
    at java.lang.reflect.Field.acquireFieldAccessor(Field.java:918)
    at java.lang.reflect.Field.getFieldAccessor(Field.java:899)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.RuntimeException: Could not instantiate SchemaTypeSystemImpl (java.lang.reflect.InvocationTargetException): is the version of xbean.jar correct?
    at schemaorg_apache_xmlbeans.system.sE130CAA0A01A7CDE5A2B4FEB8B311707.TypeSystemHolder.loadTypeSystem(Unknown Source)
    at schemaorg_apache_xmlbeans.system.sE130CAA0A01A7CDE5A2B4FEB8B311707.TypeSystemHolder.<clinit>(Unknown Source)
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native …
Run Code Online (Sandbox Code Playgroud)

java xmlbeans apache-poi

3
推荐指数
1
解决办法
5409
查看次数

如何将XmlCursor内容插入DOM Document

有些API会返回指向XML Document根目录的XmlCursor.我需要将所有这些插入到另一个org.w3c.DOM表示的文档中.

在开始:XmlCursor poiting

<a> <b> some text </b> </a>

<foo>

</foo>

DOM文档:

<foo>

  <someOtherInsertedElement>

    <a> <b> some text </b> </a>

  </someOtherInsertedElement>

</foo>

document.importNode(cursor.getDomNode())

最后我希望将原始DOM文档更改为:

<a> <b> some text </b> </a>

<foo>

</foo>

注意:

<foo>

  <someOtherInsertedElement>

    <a> <b> some text </b> </a>

  </someOtherInsertedElement>

</foo> 不起作用 - 抛出异常:NOT_SUPPORTED_ERR:实现不支持所请求的对象或操作类型.

java xml xmlbeans

2
推荐指数
1
解决办法
3617
查看次数

XMLBeans中丢失了已解析元素的顺序

我有一个像这样的XML结构:

<root>
    <a/>
    <b/>
    <b/>
    <a/>
    <a/>
</root>
Run Code Online (Sandbox Code Playgroud)

我的XSD看起来像这样:

<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:choice maxOccurs="unbounded">
                <xs:element ref="a"/>
                <xs:element ref="b"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="a" type="xs:string" />
<xs:element name="b" type="xs:string" />
Run Code Online (Sandbox Code Playgroud)

即我有两个不同子标签的随机序列.

使用XMLBeans我得到一个带有访问方法的Root对象:getAArray(),getBArray()

这是我的问题:
标签按名称分组,原始顺序(a,b,b,a,a)丢失.
但我需要知道这些元素顺序.

使用XMLBeans,最好/最简单的方法是什么?

java xml xmlbeans

2
推荐指数
1
解决办法
1042
查看次数

XMLBeans get_store()方法返回null

我正在使用XMLBeans绑定开发基于Axis2的WebServices.我已经使用WSDL2Java生成器生成了代码,并尝试使用请求中设置的样本值对其进行测试.

在其中一个setter方法(自动生成的代码)中,我找到了下面的代码.该方法get_store()返回一个空值,因此我得到一个NullPointerException.

target = (org.apache.xmlbeans.SimpleValue)
    get_store().find_element_user(TRANSACTIONTYPE$0, 0);
Run Code Online (Sandbox Code Playgroud)

我尝试谷歌找到解决方案,发现类似的问题没有指定解决方案.

这个问题有什么解决方法吗?请帮助我

java apache axis2 xmlbeans

2
推荐指数
1
解决办法
1661
查看次数

java.lang.NoSuchMethodError:org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions;

我正在尝试编写一个在Excel中编写数据的程序.但我一直收到错误,如下所示:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions;
    at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
    at wriExcel.main(wriExcel.java:19)
Run Code Online (Sandbox Code Playgroud)

在找到解决方案时,我只能发现我应该使用XMLBeans 2.0或更高.但是,我正在使用xmlbeans 2.3.0.这个错误还有其他原因吗?

java xmlbeans

2
推荐指数
2
解决办法
2万
查看次数

为什么在运行时出现“未实现DOM级别3”错误?

我目前正在开发具有XMLBeans绑定而不是默认JAXB绑定的Apache CXF Web服务。我正在使用Java 1.6编译和运行代码。对于以下代码段,在运行时出现“ DOM Level 3 Not Implemented”错误:

ExtType[] extTypeList = p.getExtArray();
        for (ExtType extType : extTypeList) {               
            Node node = extType.getDomNode();
            NodeList objList = node.getChildNodes();
            for (int i = 0; i < objList.getLength(); ++i) {
                Node text = (Node) objList.item(i);                 
                if (text.getNodeName() != null
                        && text.getNodeName() == XmlConstant.NODE_NAME) {

                    info.setDuration(text
                            .getTextContent());
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

在JBoss中显示的确切错误如下:

java.lang.RuntimeException: DOM Level 3 Not implemented
        at org.apache.xmlbeans.impl.store.DomImpl._node_getTextContent(DomImpl.java:2516)
        at org.apache.xmlbeans.impl.store.Xobj$NodeXobj.getTextContent(Xobj.java:2607)
Run Code Online (Sandbox Code Playgroud)

从以上错误消息中可以明显看出,由于在运行时未找到DOM 3级API,因此getTextContent方法引起了异常。如何消除此错误?我猜我将不得不弄清楚哪个jar包含DOM API,并从该jar中删除所有与dom相关的类,以便代替使用与jdk一起提供的默认DOM API。或者,是否有一种方法可以使用DOM而不依靠getTextContent方法来获取xml标记的文本内容?

java dom cxf xmlbeans

1
推荐指数
1
解决办法
5206
查看次数

如何在不使用toString()的情况下从JAVA中的XmlObject中提取信息?

我有一个XmlObject(org.apache.xmlbeans.XmlObject)obj.

    XmlObject obj;
    ...
    obj.toString(); //<xml-fragment>n2</xml-fragement>
    // content ="n2"
    String content = obj.toString().substring(14, obj.length() - 15) 
Run Code Online (Sandbox Code Playgroud)

在内容中存储"n2"的正确方法是什么?

java xml xmlbeans

1
推荐指数
1
解决办法
6504
查看次数

为 XmlObject 提供参数 SchemaType

我有一个类

public class CreditCardDocumentImpl extends org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements creditcard.CreditCardDocument
{

   public CreditCardDocumentImpl(org.apache.xmlbeans.SchemaType sType)
   {
       super(sType);
   }
}
Run Code Online (Sandbox Code Playgroud)

该类正在实现“CreditCardDocument”接口。

界面就像

public interface CreditCardDocument extends org.apache.xmlbeans.XmlObject
{
Run Code Online (Sandbox Code Playgroud)

现在,如果我想访问该构造函数

CreditCardDocument creditCardDocument = new CreditCardDocumentImpl(CreditCardDocumentImpl.class.instanceType());
Run Code Online (Sandbox Code Playgroud)

它抛出错误,

groovy.lang.MissingMethodException: No signature of method: static creditcard.impl.CreditCardDocumentImpl.instanceType() is applicable for argument types: () values: []
Run Code Online (Sandbox Code Playgroud)

我不明白是什么错误。我需要传递给构造函数的参数是什么?

java xmlbeans

1
推荐指数
1
解决办法
1781
查看次数

使用Apache POI读取XLSX文件时发生异常

我目前正在与Apachi合作,因为我需要从XLSX文件读取数据,以后将其转换为CSV。这是我用来创建XSSFWorkbook的代码,它每次都会导致异常。据我所知,XMLBeans是其中的一部分。它已被弃用,但是在这种情况下,它是POI的依赖项。

public static void appendCSV(File inputFile, String outputFile, String tag)
{
    System.out.println(inputFile.getAbsolutePath());
       InputStream inp = null;
        try {
            inp = new FileInputStream(inputFile);
            XSSFWorkbook wb = new XSSFWorkbook(inp);
Run Code Online (Sandbox Code Playgroud)

我的异常被抛出在上面代码块的最后一行。

Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:65)
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:601)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:279)
at BigBangarang.appendCSV(BigBangarang.java:68)
at BigBangarang.main(BigBangarang.java:268)

Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
... 5 more

Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;
at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50)
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:127)
at org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:108)
... 11 more
Run Code Online (Sandbox Code Playgroud)

有人遇到过这种情况吗?我拥有最新的XMLBeans版本,几乎感觉到我可能需要找到一个旧版本,因为它说缺少一种方法。我不确定是否有替代/便捷的方法来读取XLSX,或者在处理任何数据之前将其简单地转换为CSV。

java exception xmlbeans xlsx apache-poi

1
推荐指数
1
解决办法
6251
查看次数

Gradle jlink 插件在 createMergedModule 期间失败,“服务实现没有默认构造函数”

我正在使用带有 JDK 12.0.1 和org.beryx.jlink插件 (2.10.4) 的Gradle(4.10.3,但我已经尝试了 5.4.1 之前的大多数版本),但是每次我尝试创建jlink图片:

-> 任务:createMergedModule

无法从服务加载器调用中派生使用子句:com/fasterxml/jackson/databind/ObjectMapper$2.run()。

无法从服务加载器调用中派生使用子句:com/fasterxml/jackson/databind/ObjectMapper.secureGetServiceLoader()。

无法从以下位置的服务加载器调用派生使用子句:org/apache/commons/compress/utils/ServiceLoaderIterator.()。

C:\Users\MyName\IdeaProjects\myapp\build\jlinkbase\tmpjars\myapp.merged.module\module-info.java:393: 错误:服务实现没有默认构造函数:XBeansXPath 提供 org.apache.xmlbeans .impl.store.PathDelegate.SelectPathInterface 与 org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath;

C:\Users\MyName\IdeaProjects\myapp\build\jlinkbase\tmpjars\myapp.merged.module\module-info.java:394: 错误:服务实现没有默认构造函数:XBeansXQuery 提供 org.apache.xmlbeans .impl.store.QueryDelegate.QueryInterface 与 org.apache.xmlbeans.impl.xquery.saxon.XBeansXQuery;2 错误

-> 任务:createMergedModule 失败

当我点击在合并中抛出错误的行时module-info.java,它指向这两个:

provides org.apache.xmlbeans.impl.store.PathDelegate.SelectPathInterface with org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath;
provides org.apache.xmlbeans.impl.store.QueryDelegate.QueryInterface with org.apache.xmlbeans.impl.xquery.saxon.XBeansXQuery;
Run Code Online (Sandbox Code Playgroud)

我的build.gradle文件看起来像这样:

plugins {
    id 'application'
    id 'idea'
    id 'java'
    id 'org.openjfx.javafxplugin' version '0.0.7'
    id 'org.beryx.jlink' version '2.10.4'
}

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.apache.commons:commons-csv:1.6'
    compile 'org.apache.poi:poi-ooxml:4.1.0'
    compile 'com.fasterxml.jackson.core:jackson-core:2.9.9'
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.9'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.9.9' …
Run Code Online (Sandbox Code Playgroud)

java javafx xmlbeans gradle jlink

1
推荐指数
1
解决办法
1217
查看次数

标签 统计

java ×12

xmlbeans ×12

xml ×4

apache-poi ×2

apache ×1

axis2 ×1

builder ×1

cxf ×1

dom ×1

exception ×1

generics ×1

gradle ×1

javafx ×1

jlink ×1

xlsx ×1