我正在解决这个错误,同时解组一个字符串.我使用JAXB创建了Java文件.
JAXBContext jaxbContext = JAXBContext.newInstance(DocumentType.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// Input string posted below
DocumentType dType = (DocumentType) unmarshaller.unmarshal(new StringReader("input string"));
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd", local:"document"). Expected elements are (none)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3065)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203)
at …Run Code Online (Sandbox Code Playgroud) 我需要针对我的模式验证Class对象,在该模式中我提供了正则表达式来验证自动生成的JAXB类的字段.当我尝试验证我的类对象时,我得到以下错误:
无法编组类型"xyz"作为元素,因为它缺少@XmlRootElement注释
这是我用来验证自动生成的类对象的代码:
jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以解决这个问题吗?
我在使用XJC从XSD生成具有适当JAXB注释的Java类时遇到一些问题.
我有一个相对简单的XSD文件来定义我的XML模式.XSD中的复杂类型利用<xs:extension>标记继承.我遇到的问题是我需要所有复杂的类型来生成Java类@XmlRootElement.
不幸的是,XJC生成类的方式意味着只有派生类才能获得@XmlRootElement(而不是基类).我使用简单的全局绑定指令来确保它解决了我在XJC面临的许多其他问题.
以下是XSD的示例代码段:
<xs:schema version="1.0" targetNamespace="http://www.knowledgemill.com/kmcs"
xmlns:kmcs="http://www.knowledgemill.com/kmcs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.0"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
elementFormDefault="qualified">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings>
<xjc:simple />
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="Artifact" type="kmcs:Artifact"/>
<xs:element name="EmailArtifact" type="kmcs:EmailArtifact"/>
<xs:complexType name="Artifact">
<xs:sequence>
<xs:element name="artifactId" type="xs:string" minOccurs="0"/>
<xs:element name="artifactType" type="xs:string" minOccurs="0"/>
<xs:element name="contentHash" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="EmailArtifact">
<xs:complexContent>
<xs:extension base="kmcs:Artifact">
<xs:sequence>
<xs:element name="subject" type="xs:string" minOccurs="0"/>
<xs:element name="threadSubject" type="xs:string" minOccurs="0"/>
<xs:element name="from" type="xs:string" minOccurs="0"/>
<xs:element name="to" type="xs:string" minOccurs="0"/>
<xs:element name="cc" type="xs:string" minOccurs="0"/>
<xs:element name="bcc" type="xs:string" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JAX WS为PayPal Express Checkout API实现简单的Web服务客户端.PayPal Express Checkout API提供了WSDL文件,我可以使用CXF的wsdl2java实用程序从中生成Java类.
出于身份验证原因,它需要为每个请求添加SOAP Header.这个标题非常简单,应该如下所示:https: //cms.paypal.com/us/cgi-bin/?cmd = __render-content&content_ID = developer/e_howto_api_ECSOAPAPasics #id09C3I0CF0O6
从WSDL类生成的包括ebay.apis.eblbasecomponents.CustomSecurityHeaderType类,它表示我需要添加到每个请求的标头.
所以问题是:如何考虑以下条件,将手动创建的CustomSecurityHeaderType类实例添加到SOAP请求的标题中:
是否可以将javax.xml.bind.annotation.XmlType转换为XML的String表示形式?
例:
以下类Req来自第三方库,因此我无法覆盖toString()方法.
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
@javax.xml.bind.annotation.XmlType(name = "req", propOrder = {"myDetails", "customerDetails"})
public class Req {
...
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我想简单地获取XML的String表示,以便我可以将其记录到文件中:
<Req>
<MyDetails>
...
</MyDetails>
<CustomerDetails>
...
</CustomerDetails>
</Req>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用JAXB和Marshall转换为XML String时:
JAXBContext context = JAXBContext.newInstance(Req.class);
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.marshal(instanceOfReq, sw);
String xmlString = sw.toString();
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: unable to marshal type "mypackage.Req" as an element because it is missing an @XmlRootElement annotation]
Run Code Online (Sandbox Code Playgroud)
我查看了第三方库中的其他类,但没有一个使用@XmlRootElement注释.有什么方法吗?
我正在使用Java 6,JaxB 2和SpringSource Tool Suite(与Eclipse相同).我有几个我编写的Java类,我从中使用JaxB生成XML模式.但是,我注意到为了使用JaxB从Java对象生成XML文档的能力,我需要一个ObjectFactory.
final Marshaller marshaller = jaxbContext.createMarshaller();
// Here is where I don't have an ObjectFactory defined
final JAXBElement<WebLeads> webLeadsElement
= (new ObjectFactory()).createWebLeads(webLeadsJavaObj);
Run Code Online (Sandbox Code Playgroud)
如何在不吹走现有类的情况下生成ObjectFactory?
我有一个关于使用基于第三方wsdl文件的Web服务的问题.
我已经采用了给定的wsdl并生成了所需的120多个java文件.这个过程是通过使用xjc完成的.在Sping环境中,我能够通过调用几个公开的服务来成功创建几个JUnit测试.
但是,为了成功测试这些服务,我必须将@XmlRootElement注释添加到生成的java文件中.否则,我会遇到一个错误说明
"com.sun.istack.SAXException2:无法编组类型"com.beam.services.client.UserGetRequestData"作为元素,因为它缺少@XmlRootElement注释"
.
我已经用尽了我的搜索...我无法控制如何创建/结构化wsdl文件.如何生成java文件以确保包含@XmlRootElement注释,或者以编写客户端代码的方式避免上述错误?
谢谢.
我想将对象编组为XML.
但是,它失败,但有例外:
javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: unable to marshal type "FreightOfferDetail" as an element because it is missing an @XmlRootElement annotation]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:331)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:257)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:96)
at com.wktransportservices.fx.test.util.jaxb.xmltransformer.ObjectTransformer.toXML(ObjectTransformer.java:27)
at com.wktransportservices.fx.test.sampler.webservice.connect.FreightOfferToConnectFreight.runTest(FreightOfferToConnectFreight.java:59)
at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:191)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:429)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.istack.SAXException2: unable to marshal type "FreightOfferDetail" as an element because it is missing an @XmlRootElement annotation
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:244)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:303)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:490)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:328)
Run Code Online (Sandbox Code Playgroud)
实际上,这个注释存在(对于父类和交付类):
@XmlRootElement(name = "Freight_Offer")
@XmlAccessorType(XmlAccessType.FIELD)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class FreightOffer { …Run Code Online (Sandbox Code Playgroud) 我正在从http://www.ncpdp.org的 XSD 文件生成大量 Java 文件(仅对会员可用)。生成它们后,我想在 Spring 控制器中使用它们,但在将响应转换为 XML 时遇到问题。
我尝试返回元素本身以及 JAXBElement<T>,但似乎都不起作用。下面的测试失败:
java.lang.AssertionError: Status
Expected :200
Actual :406
@Test
public void testHelloWorld() throws Exception {
mockMvc.perform(get("/api/message")
.accept(MediaType.APPLICATION_XML)
.contentType(MediaType.APPLICATION_XML))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_XML));
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
import org.ncpdp.schema.transport.MessageType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@RequestMapping(value = "/api/message", method = RequestMethod.GET)
public MessageType messageType() {
return new MessageType();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个 MvcConfig 来覆盖 Spring Boot 的 MVC 配置,但它似乎不起作用。
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> …Run Code Online (Sandbox Code Playgroud) 我需要在Java中生成基于XSD模板的XML文件,我可以解析XSD文件,但解析后不知道,热生成XML文件.你知道怎么做的例子或建议吗?我对此并不是很专家,所以我感谢任何帮助.
提前谢谢了.
java ×7
jaxb ×6
xml ×3
jaxb2 ×2
spring ×2
xsd ×2
java-ee ×1
jax-ws ×1
marshalling ×1
paypal ×1
schema ×1
soap ×1
spring-boot ×1
spring-mvc ×1
web-services ×1
xjc ×1