标签: jaxb

Java 11包javax.xml.bind不存在

我正在尝试使用JAXB将XML数据反序列化为Java内容树,在解组时验证XML数据:

try {
  JAXBContext context = JAXBContext.newInstance("com.acme.foo");
  Unmarshaller unmarshaller = context.createUnmarshaller();
  unmarshaller.setSchema(schema);
  FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));
} catch (UnmarshalException ex) {
  ex.printStackTrace();
} catch (JAXBException ex) {
  ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

当我使用Java 8构建项目时,它很好,但使用Java 11构建它失败并出现编译错误:

package javax.xml.bind does not exist
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java jaxb java-11

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

JAXB 2的ObjectFactory类有什么意义?

我是使用JAXB的新手,我使用JAXB 2.1.3的xjc从我的XML Schema生成一组类.除了为我的模式中的每个元素生成一个类之外,它还创建了一个ObjectFactory类.

似乎没有什么能阻止我直接实例化元素,例如

MyElement element = new MyElement();
Run Code Online (Sandbox Code Playgroud)

而教程似乎更喜欢

MyElement element = new ObjectFactory().createMyElement();
Run Code Online (Sandbox Code Playgroud)

如果我查看ObjectFactory.java,我会看到:

public MyElement createMyElement() {
    return new MyElement();
}
Run Code Online (Sandbox Code Playgroud)

这是什么交易?为什么我甚至不打扰保持ObjectFactory类?我假设如果我从更改的模式重新编译它也将被覆盖.

java jaxb

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

javax.xml.bind.UnmarshalException:意外元素(uri:"",local:"Group")

unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Run Code Online (Sandbox Code Playgroud)

从xml解组时遇到异常

JAXBContext jc = JAXBContext.newInstance(Group.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
Run Code Online (Sandbox Code Playgroud)

组类没有任何注释,group.xml只包含数据.

什么都可能是原因?

java xml jaxb

92
推荐指数
5
解决办法
24万
查看次数

将Java对象转换为XML字符串

是的,是的,我知道有很多关于这个主题的问题.但我仍然无法找到解决问题的方法.我有一个属性注释的Java对象.例如Customer,就像在这个例子中一样.我想要一个String表示它.谷歌建议将JAXB用于此类目的.但是在所有示例中,创建的XML文件都打印到文件或控制台,如下所示:

File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
Run Code Online (Sandbox Code Playgroud)

但我必须使用此对象并以XML格式通过网络发送.所以我想得到一个代表XML的String.

String xmlString = ...
sendOverNetwork(xmlString);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java xml jaxb

84
推荐指数
5
解决办法
20万
查看次数

如何指定JAXB封送xsd:dateTime时使用的日期格式?

当JAXB将日期对象(XMLGregorianCalendar)编组到xsd:dateTime元素中时,如何指定生成的XML的格式?

例如:默认数据格式是使用<StartDate>2012-08-21T13:21:58.000Z</StartDate> 我需要的毫秒来省略毫秒. <StartDate>2012-08-21T13:21:58Z</StartDate>

如何指定我希望它使用的输出格式/日期格式?我正在使用javax.xml.datatype.DatatypeFactory创建XMLGregorianCalendar对象.

XMLGregorianCalendar xmlCal = datatypeFactory.newXMLGregorianCalendar(cal);
Run Code Online (Sandbox Code Playgroud)

format datetime jaxb marshalling milliseconds

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

java.lang.VerifyError:期望分支目标JDK 1.7处的stackmap帧

升级到JDK 1.7后,我得到以下异常:

java.lang.VerifyError: Expecting a stackmap frame at branch target 71 in method com.abc.domain.myPackage.MyClass$JaxbAccessorM_getDescription_setDescription_java_lang_String.get(Ljava/lang/Object;)Ljava/lang/Object; at offset 20
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413)
    at java.lang.Class.getConstructor0(Class.java:2723)
    at java.lang.Class.newInstance0(Class.java:345)
    at java.lang.Class.newInstance(Class.java:327)
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:184)
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:129)
    at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:384)
    at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:72)
    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:525)
    at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:494)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:311)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:126)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1148)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at com.abc.domain.myPackage.MyClass.marshalFacetsTest(MyClass.java:73) …
Run Code Online (Sandbox Code Playgroud)

java jaxb java-7

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

从生成的XML中删除'standalone ="yes"'

您是否知道JAXB设置可以防止在生成的XML中生成standalone ="yes"

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

xml xsd jaxb xml-binding

78
推荐指数
7
解决办法
9万
查看次数

如何告诉jaxb/Maven生成多个架构包?

例:

</plugin>       
       <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>
           <artifactId>maven-jaxb2-plugin</artifactId>
           <version>0.7.1</version>
           <executions>
             <execution>
               <goals>
                 <goal>generate</goal>
               </goals>
             </execution>
           </executions>
            <configuration>
             <schemaDirectory>src/main/resources/dir1</schemaDirectory>
              <schemaIncludes>
                  <include>schema1.xsd</include>
              </schemaIncludes>
              <generatePackage>schema1.package</generatePackage>
           </configuration>
         </plugin>
          <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>
           <artifactId>maven-jaxb2-plugin</artifactId>
           <version>0.7.1</version>
           <executions>
             <execution>
               <goals>
                 <goal>generate</goal>
               </goals>
             </execution>
           </executions>
            <configuration>
             <schemaDirectory>src/main/resources/dir2</schemaDirectory>
              <schemaIncludes>
                  <include>schema2.xsd</include>
              </schemaIncludes>
              <generatePackage>schema2.package</generatePackage>
           </configuration>
         </plugin>
       </plugins>
Run Code Online (Sandbox Code Playgroud)

发生了什么:Maven执行第一个插件.然后删除目标文件夹并创建第二个包,然后该包可见.

我尝试为第一个配置设置target/somedir1,为第二个配置设置target/somedir2.但这种行为并没有改变?有任何想法吗?我不想直接在src/main/java文件夹中生成包,因为这些包是经过处理的,不应与手动创建的类混合使用.

java schema xsd maven-2 jaxb

73
推荐指数
5
解决办法
10万
查看次数

使用JAXB的具有属性和内容的XML元素

如何使用JAXB生成以下XML?

<sport type="" gender="">
    sport description
</sport>
Run Code Online (Sandbox Code Playgroud)

java xml jaxb

71
推荐指数
4
解决办法
12万
查看次数

JAXB:如何将地图编组为<key> value </ key>

问题是关于JAXB Map编组 - 有很多关于如何将Map转换为如下结构的示例:

<map>
  <entry>
    <key> KEY </key>
    <value> VALUE </value>
  </entry>
  <entry>
    <key> KEY2 </key>
    <value> VALUE2 </value>
  </entry>
  <entry>
  ...
</map>
Run Code Online (Sandbox Code Playgroud)

实际上,这是JAXB原生支持的.但是,我需要的是XML,其中key是元素名称,value是其内容:

<map>
  <key> VALUE </key>
  <key2> VALUE2 </key2>
 ...
</map>
Run Code Online (Sandbox Code Playgroud)

我没有按照JAXB开发人员推荐的方式(https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html)成功实现我的Map适配器,因为我需要,他 - 动态属性名称:)

那有什么解决方案吗?

PS目前我必须为每个我想要编组的典型键值对创建一个专用的容器类 - 它可以工作,但是我必须创建太多这些辅助容器.

java xml jaxb jaxb2

64
推荐指数
4
解决办法
10万
查看次数

标签 统计

jaxb ×10

java ×8

xml ×5

xsd ×2

datetime ×1

format ×1

java-11 ×1

java-7 ×1

jaxb2 ×1

marshalling ×1

maven-2 ×1

milliseconds ×1

schema ×1

xml-binding ×1