gpt4 book ai didi

java - 在两个不同文件中使用替换的 jaxb 中的非法注释异常

转载 作者:行者123 更新时间:2023-11-29 03:18:24 25 4
gpt4 key购买 nike

当我在两个不同的 xsd 文件中使用替换时,JAXB 会抛出错误:

首先xsd RegTypy.xsd包含:

<xs:element name="AisSeznamUdajuAbstract" abstract="true"/>
<xs:element name="AisSeznamUdaju" type="AisSeznamUdajuType" substitutionGroup="AisSeznamUdajuAbstract"/>

第二个 xsd AiseoTypy.xsd 包含:

<xs:element name="AiseoSeznamUdaju" type="AiseoSeznamUdajuEOType" substitutionGroup="reg:AisSeznamUdajuAbstract"/>

如您所见,我引用了第一个 xsd 中的 AisSeznamUdajuAbstract

在ObjectFactory中有generated方法:

@XmlElementDecl(namespace = "urn:cz:isvs:aiseo:schemas:AiseoTypy:v1", name = "AiseoSeznamUdaju", substitutionHeadNamespace = "urn:cz:isvs:reg:schemas:RegTypy:v1", substitutionHeadName = "AisSeznamUdajuAbstract")
public JAXBElement<List<String>> createAiseoSeznamUdaju(List<String> value) {
return new JAXBElement<List<String>>(_AiseoSeznamUdaju_QNAME, ((Class) List.class), null, ((List<String> ) value));
}

导致非法参数异常:

[com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions|No element mapping exists for "urn:cz:isvs:reg:schemas:RegTypy:v1":"AisSeznamUdajuAbstract"|?this problem is related to the following location:|??at @javax.xml.bind.annotation.XmlElementDecl(scope=class javax.xml.bind.annotation.XmlElementDecl$GLOBAL, substitutionHeadName=AisSeznamUdajuAbstract, defaultValue=?, substitutionHeadNamespace=urn:cz:isvs:reg:schemas:RegTypy:v1, namespace=urn:cz:isvs:aiseo:schemas:AiseoTypy:v1, name=AiseoSeznamUdaju)|??at public javax.xml.bind.JAXBElement cz.isvs.aiseo.schemas.aiseotypy.v1.ObjectFactory.createAiseoSeznamUdaju(java.util.List)

如何使用带绑定(bind)的 JAXB 自定义来解决此异常?我无法更改 XSD

更新:

在 Spring 背景下我有:

<sws:annotation-driven marshaller="marshaller" unmarshaller="marshaller" />

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPaths">
<array>
<value>...</value>
<value>...</value>
...
</array>
</property>
</bean>

但是当我向这个端点发送消息时,spring 似乎正在创建另一个编码器:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91) ~[?:1.7.0_25]
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:451) ~[?:1.7.0_25]
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:283) ~[?:1.7.0_25]
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:126) ~[?:1.7.0_25]
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1148) ~[?:1.7.0_25]
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:130) ~[?:1.7.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_25]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_25]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248) ~[?:1.7.0_25]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235) ~[?:1.7.0_25]
at javax.xml.bind.ContextFinder.find(ContextFinder.java:445) ~[?:1.7.0_25]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637) ~[?:1.7.0_25]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584) ~[?:1.7.0_25]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor.getJaxbContext(AbstractJaxb2PayloadMethodProcessor.java:216) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor.createMarshaller(AbstractJaxb2PayloadMethodProcessor.java:191) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor.access$500(AbstractJaxb2PayloadMethodProcessor.java:70) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor$Jaxb2ResultCallback.<init>(AbstractJaxb2PayloadMethodProcessor.java:312) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor$Jaxb2ResultCallback.<init>(AbstractJaxb2PayloadMethodProcessor.java:305) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.AbstractJaxb2PayloadMethodProcessor.marshalToResponsePayload(AbstractJaxb2PayloadMethodProcessor.java:100) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPayloadMethodProcessor.handleReturnValue(JaxbElementPayloadMethodProcessor.java:60) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.handleMethodReturnValue(DefaultMethodEndpointAdapter.java:295) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:248) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53) ~[spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:233) [spring-ws-core-2.1.2.RELEASE.jar:?]
at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:173) [spring-ws-core-2.1.2.RELEASE.jar:?]

最佳答案

注意:以下要求两个 XML 模式具有不同的命名空间:

当您在从多个 XML 模式生成的模型上创建 JAXBContext 时,您需要执行以下任一操作以提取所有元数据。

  1. 包含每个包中的 ObjectFactory 类。

    JAXBContext jc = JAXBContext.newInstance(example.foo.ObjectFactory.class, example.bar.ObjectFactory.class);
  2. 包括两个以冒号分隔的包名称:

    JAXBContext jc = JAXBContext.newInstance("example.foo:example.bar");

关于java - 在两个不同文件中使用替换的 jaxb 中的非法注释异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25134819/

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