java jaxb意外元素解组
为什么在使用JAXB时需要使用ObjectFactory.java 我的工作场景如下: 我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我刚刚在代码中添加了@XmlRoot、@xmlemement等注释。我解决了注释相关的错误 现在我得到了如下错误: 意外元素uri:urn:Adapter-v3,local:Settings。预期要素包括: XML文件如下所示:java jaxb意外元素解组,java,jaxb,Java,Jaxb,为什么在使用JAXB时需要使用ObjectFactory.java 我的工作场景如下: 我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我刚刚在代码中添加了@XmlRoot、@xmlemement等注释。我解决了注释相关的错误 现在我得到了如下错误: 意外元素uri:urn:Adapter-v3,local:Settings。预期要素包括: XML文件如下所示: <?xml version="1.0" encoding="utf-8"?> <!
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<Settings version="3" xmlns="urn:Adapter-v3">
<Connections>
<Connection name ="A" description="DEV">
<SaveVersion version="M" siteURL="https://example.com" />
<Save>
<Id>id123</Id>
<Client>hello</Client>
</Save>
</Connection>
<Connection name ="B" description="DEV1">
<SaveVersion version="M" siteURL="https://example.com" />
<Auth>
<UserId>id123</UserId>
<Password>pass</Password>
</Auth>
</Connection>
</Connections>
<Mappings>
<Mapping cont="AA" auction="A1">
<Description>Desc</Description>
<Content
attr1="IO"
attr2="d"
attr3="Information"
attr4="false"
<Element enabled="false" count="200" prefix="DocLib_" itemPrefix="0" />
<Sub enabled="false" count="100" prefix="Folder_" itemPrefix="0" />
<FilenameA auction="N" delay="3" />
</Content>
</Mapping>
<Mapping cont="AB" auction="SharePointOLDev1">
<Description>Desc</Description>
<Content
attr1="IO"
attr2="d"
attr3="Information"
attr4="false"
<Element enabled="false" count="200" prefix="DocLib_" itemPrefix="0" />
<Sub enabled="false" count="100" prefix="1" itemPrefix="0" />
</Content>
</Mapping>
</Mappings>
<TypeMappings>
<TypeMapping Type="rfid" ext="msg" />
</TypeMappings>
</Settings>
POJO类:
public class Settings {
@XmlElement(name="Connections", nillable=false, type=Connection.class)
public ArrayList<Connection> Connections;
@XmlElement(name="Mappings", nillable=false, type=Mapping.class)
public Mapping[] Mappings;
protected ArrayList<TypeMapping> TypeMappings;
public Mapping[] getMappings() {
return Mappings;
}
public void setMappings(ContentServerMapping[] contentServerMappings) {
Mappings = Mappings;
}
@XmlElement(name="TypeMappings")
public ArrayList<MIMETypeMapping> getTypeMappings() {
return TypeMappings;
}
public void setTypeMappings(ArrayList<TypeMapping> TypeMappings) {
TypeMappings = TypeMappings;
}
}
您缺少一个命名空间。要么将namespace=urn:Adapter-v3添加到所有@xmlements和co.everywhere。或者只需声明整个包的默认命名空间:
@javax.xml.bind.annotation.XmlSchema(
namespace = "urn:Adapter-v3",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.acme.foo;
顺便说一句,在包info.java.中,POJO的setters中有一个错误:Mapping=Mapping;没有效果。你需要写这个。Mapping=Mapping;取而代之的是。这起作用了..:谢谢。错误已经解决,但是我的变量连接、映射和类型映射都是空的,尽管给出了这个。Mappings=Mappings。@user9450093这是一个不同的问题。你能给我一个关于指定名称空间重要性的见解吗?@user9450093如果你的XML有名称空间,您的JAXB类也应该有它。@user9450093否和是。不,您不必使用生成的ObjectFactory创建对象。是的,在某些情况下,JAXB需要ObjectFactory作为实例替换组。