![](/img/trans.png)
[英]org.apache.cxf.interceptor.Fault: Marshalling Error: null
[英]org.apache.cxf.interceptor.Fault: Unmarshalling Error: Illegal character (NULL, unicode 0) encountered: not valid in any content
我正在使用使用本地传输的cxf Web服务,并从Java应用程序访问Web服务。 Web服务正在读取文件并通过Web服务调用进行发送。 我正在使用字节大小为512。假设文件大小为1200。检索文件的前两次尝试均成功,对于最后一个块,我得到org.apache.cxf.interceptor.Fault:编组错误:非法字符(NULL ,遇到unicode 0):在任何内容中均无效。
此处块代表512字节。 我正在将字节转换为字符串并从Web服务返回。在最后一块中,仅填充16个字节的值,其余填充为零。 任何帮助将不胜感激。 我正在使用cxf webservice 2.7.5,jdk1.7和Redhat Linux。
堆栈跟踪:
org.apache.cxf.interceptor.Fault: Unmarshalling Error: Illegal character (NULL, unicode 0) encountered: not valid in any content
at [row,col {unknown-source}]: [2,1]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:808)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:629)
at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:157)
at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:103)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:800)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1592)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1490)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1309)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:133)
at $Proxy62.getJobLog(Unknown Source)
at com.java.process.AClass.getMessage(AClass.java:468)
at com.java.process.AClass.getXXXX(AClass.java:156)
at com.java.process.AClass.main(CLIClientStartup.java:409)
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character (NULL, unicode 0) encountered: not valid in any content
at [row,col {unknown-source}]: [2,1]]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:436)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:372)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:349)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:769)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:94)
at org.apache.cxf.jaxb.JAXBEncoderDecoder$1.run(JAXBEncoderDecoder.java:797)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:795)
... 23 more
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character (NULL, unicode 0) encountered: not valid in any content
at [row,col {unknown-source}]: [2,1]
at com.ctc.wstx.sr.StreamScanner.constructNullCharException(StreamScanner.java:630)
at com.ctc.wstx.sr.StreamScanner.throwInvalidSpace(StreamScanner.java:660)
at com.ctc.wstx.sr.BasicStreamReader.readTextPrimary(BasicStreamReader.java:4576)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2879)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1072)
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:196)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:370)
... 29 more
从这里
导致这些XmlExceptions的问题在于,根据XML规范,正在读取或加载的数据包含非法字符。 这些字符几乎总是在ASCII控制字符范围内(请考虑一些怪异的字符,例如null,bell,backspace等)。 这些字符与XML数据无关。 它们是非法字符,应将其删除,通常是从文件格式转换中找到了它们的方式,例如有人试图从Excel数据创建XML文件,或将其数据从可能存储为二进制文件。
还有一个在解组前清理数据的示例。 关于Java上无效XML字符的错误
也许您应该使用开箱即用的方式来传输文件,例如此处的 MTOM
或者,您可以使用CDATA语法包装内容,因此将评估为null的部分作为文字。
转到项目属性,然后将项目编码更改为UTF-8。 还对marshaller和unmarchaller使用以下内容
private static void exportToXML(JAXBContext ctx , Object obj , OutputStream stream) throws Exception{
try {
Marshaller m = ctx.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
m.marshal(obj, stream);
} catch (JAXBException e) {
e.printStackTrace();
}
}
private static Object importXML(JAXBContext ctx , String xmlStr) throws Exception {
try {
Unmarshaller m = ctx.createUnmarshaller();
ByteArrayInputStream is = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));
return m.unmarshal(is);
} catch (Throwable e) {e.printStackTrace();}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.