gpt4 book ai didi

java - CXF 的 JAXB 模式验证错误 - 发生 JAXBException : cvc-elt. 1:找不到元素的声明

转载 作者:行者123 更新时间:2023-12-01 12:08:06 24 4
gpt4 key购买 nike

我有一个使用 CXF 3.0.1REST 服务,它接受 HTTP POST 中的 XML 消息有效负载。 XML 有效负载由 JAXB 解码为对象。

我正在尝试通过 XSD 架构验证 XML,并且我已在 CXF 中配置 XSD但我不断收到以下错误

发生 JAXBException :cvc-elt.1:找不到元素“事件”的声明.. cvc-elt.1:找不到元素“事件”的声明..

注意:事件是我的根元素

据我了解,XSD已由CXF成功注册,但JAXB方面出现问题。

我尝试了许多与该错误相关的可能解决方案,但没有一个有效。

任何想法

谢谢

这是我的配置

服务

@Path("incident") 
public class CreateIncident {
@POST
@Consumes({ MediaType.APPLICATION_XML})
public Response createIncident(Incident incident) {
//code
}
}

JAXB 对象

@XmlRootElement(name = "incident") 
@XmlAccessorType(XmlAccessType.FIELD)
public class Incident extends Event {
public Incident() {
super("incident");
}

@XmlElement
private String importProfile;

@XmlElement
private String eventTitle;

public String getImportProfile() {
return importProfile;
}

public void setImportProfile(String importProfile) {
this.importProfile = importProfile;
}

public String getEventTitle() {
return eventTitle;
}

public void setEventTitle(String eventTitle) {
this.eventTitle = eventTitle;
}
}

事件:

public class Event {

String eventType;

public Event(String eventType) {
this.eventType = eventType;
}

public String getEventType(){
return eventType;
}
}

我的 XSD

<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ba.com/schema/BAassystWrapper/incident"
elementFormDefault="qualified">
<element name="incident">
<complexType>
<sequence>
<element name="importProfile">
<simpleType>
<restriction base="string">
<minLength value="1"></minLength>
<maxLength value="254"></maxLength>
</restriction>
</simpleType>
</element>
<element name="eventTitle">
<simpleType>
<restriction base="string">
<minLength value="1"></minLength>
<maxLength value="890"></maxLength>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</element>
</schema>

我传递的 XML

<incident>
<importProfile>Test text</importProfile>
<eventTitle>Test text</eventTitle>
</incident>

CXF 配置

<jaxrs:server address="/">
<jaxrs:schemaLocations>
<jaxrs:schemaLocation>classpath:xsd/incident.xsd</jaxrs:schemaLocation>
</jaxrs:schemaLocations>
<jaxrs:serviceBeans>
<bean class="com.ba.sysman.services.events.CreateIncident"></bean>
</jaxrs:serviceBeans>
<jaxrs:features>
<cxf:logging/>
</jaxrs:features>
</jaxrs:server>

最佳答案

根元素需要经过命名空间限定。因此,传入的 XML 需要类似于:

<incident xmlns="http://www.ba.com/.......">

关于java - CXF 的 JAXB 模式验证错误 - 发生 JAXBException : cvc-elt. 1:找不到元素的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com