说明
发送webservice报错
Invalid UTF-8 start byte 0xfc when using Web Service Sender
Web Service Sender error
ERROR MESSAGE: Error creating web service dispatch
com.sun.xml.ws.streaming.XMLStreamReaderException: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[183,79]
Message: Invalid byte 1 of 1-byte UTF-8 sequence.at com.sun.xml.ws.streaming.XMLStreamReaderUtil.wrapException(XMLStreamReaderUtil.java:326)at com.sun.xml.ws.streaming.XMLStreamReaderUtil.skipTags(XMLStreamReaderUtil.java:216)at com.sun.xml.ws.streaming.XMLStreamReaderUtil.skipElement(XMLStreamReaderUtil.java:189)at com.sun.xml.ws.wsdl.parser.WSDLParserExtensionFacade.portTypeOperationElements(WSDLParserExtensionFacade.java:190)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parsePortTypeOperation(RuntimeWSDLParser.java:892)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parsePortType(RuntimeWSDLParser.java:860)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parseWSDL(RuntimeWSDLParser.java:473)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:249)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:209)at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:178)at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:364)at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:322)at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:231)at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:212)at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:208)at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:119)at javax.xml.ws.Service.<init>(Service.java:112)at javax.xml.ws.Service.create(Service.java:765)at com.mirth.connect.connectors.ws.WebServiceDispatcher.createDispatch(WebServiceDispatcher.java:269)at com.mirth.connect.connectors.ws.WebServiceDispatcher.send(WebServiceDispatcher.java:458)at com.mirth.connect.donkey.server.channel.DestinationConnector.handleSend(DestinationConnector.java:904)at com.mirth.connect.donkey.server.channel.DestinationConnector.process(DestinationConnector.java:527)at com.mirth.connect.donkey.server.channel.DestinationChain.doCall(DestinationChain.java:122)at com.mirth.connect.donkey.server.channel.DestinationChain.call(DestinationChain.java:64)at com.mirth.connect.donkey.server.channel.Channel.process(Channel.java:1850)at com.mirth.connect.donkey.server.channel.Channel.dispatchRawMessage(Channel.java:1302)at com.mirth.connect.donkey.server.channel.SourceConnector.dispatchRawMessage(SourceConnector.java:194)at com.mirth.connect.server.controllers.DonkeyEngineController.dispatchRawMessage(DonkeyEngineController.java:1145)at com.mirth.connect.server.api.servlets.MessageServlet.processMessage(MessageServlet.java:119)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:568)at com.mirth.connect.server.api.providers.MirthResourceInvocationHandlerProvider$1.invoke(MirthResourceInvocationHandlerProvider.java:219)at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205)at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)at org.glassfish.jersey.internal.Errors.process(Errors.java:315)at org.glassfish.jersey.internal.Errors.process(Errors.java:297)at org.glassfish.jersey.internal.Errors.process(Errors.java:267)at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471)at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)at com.mirth.connect.server.api.providers.StrictTransportSecurityFilter.doFilter(StrictTransportSecurityFilter.java:33)at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)at com.mirth.connect.server.MethodFilter.doFilter(MethodFilter.java:37)at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)at com.mirth.connect.server.api.providers.RequestedWithFilter.doFilter(RequestedWithFilter.java:53)at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)at com.mirth.connect.server.api.providers.ClickjackingFilter.doFilter(ClickjackingFilter.java:44)at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)at com.mirth.connect.server.api.providers.ApiOriginFilter.doFilter(ApiOriginFilter.java:71)at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)at org.eclipse.jetty.server.Server.handle(Server.java:516)at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[183,79]
Message: Invalid byte 1 of 1-byte UTF-8 sequence.at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652)at com.sun.xml.ws.util.xml.XMLStreamReaderFilter.next(XMLStreamReaderFilter.java:96)at com.sun.xml.ws.streaming.XMLStreamReaderUtil.skipTags(XMLStreamReaderUtil.java:205)... 103 more
解决方法
这个是mirth的一个bug:如果web服务WSDL包含非ascii标准字符,Mirth将无法解析该WSDL。
如果您收到错误消息,例如“获取操作失败,方法失败:500内部服务器错误”,这可能是由web服务返回的WSDL中的非标准ASCII字符引起的;例如重音字符。
Mirth Connect的当前版本没有为web服务客户端定义编码的选项,而是使用默认的操作系统编码(在大多数情况下为windows-1252),这实际上是不正确的(应该是UTF-8)。
但作为一种解决方法,您可以覆盖mcservice.vmoptions文件中的“默认”编码。
请注意,在mcservice.vmoptions中设置默认编码会影响您在连接器上选择“默认编码”的所有通道!
由于大多数web服务提供商以UTF-8返回WSDL,因此可以将以下行添加到mcservice.vmoptions中作为解决方法。(别忘了重新启动Mirth Connect服务!)
-Dfile.encoding=utf-8