当前位置: 首页 > 知识库问答 >
问题:

java jaxb意外的元素解组

劳韬
2023-03-14

为什么在使用JAXB时需要使用objectFactory.java

我的工作场景是这样的:

我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我只是在代码中添加了注释(如@XmlRoot@XmlElememnt等)。并解决了与注释相关的错误。

现在我犯了这样的错误:

XML文件如下:

<?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;
    }

}

共有1个答案

曾景龙
2023-03-14

您缺少一个命名空间。您可以将namespace=“urn:adapter-v3”添加到所有的@XmlElement和CO。或者简单地声明整个包的默认名称空间:

@javax.xml.bind.annotation.XmlSchema(
    namespace = "urn:Adapter-v3",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.acme.foo;

(在包-info.java中。)

 类似资料:
  • 背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析

  • 我尝试解组一个XML文件到一个对象。 我得到了这个错误: 我的解组过程如下所示: 我的XML实体看起来像: 我的XMLFile看起来像: 那么,我的解组过程出了什么问题?XML实体是用xjc创建的。 我也尝试了简单的xml文件/对象。这对我来说很好。

  • 我尝试使用SOAP服务,用maven cxf-codegen-plugin生成存根。大多数服务都很好,除了一个难看的服务。在这种情况下,当被调用时,服务发送一个正确的响应,但是我生成的存根无法解组它,从而生成一个异常,比如(我用一个类似urlx的名称替换了URL,以简化) : javax.xml.ws.soap。SOAPFaultException:解组错误:意外元素(uri:“url3”,loc

  • 我正在使用客户端web服务。1.发出WS请求并以XML格式获得响应。2.使用客户端WSDL,我生成了存根,因此使用同样的存根将XML解组到POJO。 看起来“element”标记是额外的,但我没有JAXB存根,它是在响应中添加的。 请帮忙解决。请帮帮忙。

  • 我在将XML响应从服务转换为POJO时遇到一个异常。XML如下所示: 我是这样用的: 下面是我的文件的详细信息 包-info.java ItemLink.java ItemLinks.java