jqGrid soap error - 由以下引起:com.ctc.wstx.exc.WstxUnexpectedCharException:prolog中的意外字符'_'(代码95);预期'

问题描述 投票:1回答:1

我实现了简单的SOAP Web服务。使用soapUI成功传输请求和响应XML。

==请求XML

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aaa="http://www.aaa.com">
   <soapenv:Header/>
   <soapenv:Body>
      <aaa:getMember/>
   </soapenv:Body>
</soapenv:Envelope>

==响应XML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
   <soap:Body>
      <ns2:getMemberResponse xmlns:ns2="http://www.aaa.com">
         <return>
            <user>
               <id>aupres</id>
               <passwd>aaa</passwd>
               <age>45</age>
               <name>husband</name>
            </user>
            <user>
               <id>hwa5383</id>
               <passwd>bbb</passwd>
               <age>40</age>
               <name>wife</name>
            </user>
            <user>
               <id>julian</id>
               <passwd>ccc</passwd>
               <age>15</age>
               <name>son</name>
            </user>
         </return>
      </ns2:getMemberResponse>
   </soap:Body>
</soap:Envelope>

我尝试用jqGrid脚本调用响应soap XML,如下所示

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery SOAP test</title>
<link rel="stylesheet" type="text/css" media="screen" href="jquery-ui.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="ui.jqgrid.css"/>
<script type="text/javascript" src="jquery-2.2.0.min.js"></script>
<script type="text/javascript" src="jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="grid.locale-kr.js"></script>
</head>
<body>
<table id="grid"></table>
<div id="pager"></div>
<script>
$(document).ready(function(){
   var soapMessage = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " + 
            "xmlns:aaa=\"http://www.aaa.com\"> " +
            "<soapenv:Header/> " +
            "<soapenv:Body> " +
            "<aaa:getMember/> " +
            "</soapenv:Body> " +
            "</soapenv:Envelope>"

   var $Grid = $("#grid");
   $Grid.jqGrid({
      mtype: "post",
      url: "CallMemberBean",
      datatype: "xml",
      datastr: soapMessage,
      processData: false,

      xmlReader : {
         root : "return" 
      },
     colNames : [
        'id',
        'password',
        'age',
        'name'
     ],
     colModel : [
        { name : 'id',        width:40,  align:'center', xmlmap:'id'},
        { name : 'passwd',    width:80,  align:'left',  xmlmap:'passwd'},
        { name : 'age',       width:80,  align:'left',  xmlmap:'age'},
        { name : 'name',      width:80,  align:'right', xmlmap:'name' }
     ],
     pager : '#pager',
     rowNum : '10',

     loadComplete : onloadComplete,

     loadError : onloadError,

     gridComplete : ongridComplete
      });

      function onloadComplete(data) {
     console.log(data)
      }

      function onloadError(jqXHR, textStatus, errorThrown) {
     console.log(jqXHR)
     console.log(errorThrown)
         console.log(textStatus)
          }
    });

此jqGrid客户端代码抛出以下错误

20:45:52,568 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-45) Interceptor for {http://www.aaa.com}CallMemberBeanService has thrown exception, unwinding now: org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
    at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:259)
    at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:65)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
    at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:97)
    at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:131)
    at org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:88)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
    at org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:136)
    at org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140) [jbossws-spi-2.3.1.Final.jar:2.3.1.Final]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:248) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:77) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:167) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:761) [undertow-core-1.1.8.Final.jar:1.1.8.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.8.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_65]
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_65]
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '_' (code 95) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]
    at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
    at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2052)
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1134)
    at com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1157)
    at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:161)
    ... 39 more
jquery soap jqgrid
1个回答
0
投票

您发布的错误消息看起来像服务器端错误。你使用datatype: "xml",数据将从url: "CallMemberBean"加载。要使用datastr: soapMessage作为网格的输入数据而不是向url发出请求,您需要使用datatype: "xmlstring"

如果soapMessage包含Request XML,那么您应该使用postData参数而不是datastr参数:

postData: soapMessage

如果postData参数的类型是字符串,就像你的情况一样,那么postData的值将替换标准参数,该参数通常发送jqGrid。你应该另外添加ajaxGridOptions: { contentType: "text/xml; charset=utf-8" }选项。

将自定义格式化数据发送到服务器的另一种方法是使用serializeGridData回调函数。返回回调的数据将用作底层jQuery.ajax请求使用的数据。它允许您构建包含一些动态选项(当前页码,页面大小等)的SOAP请求:

serializeGridData: function (postdata) {
    return soapMessage; // can be build from postdata dynamically
}
© www.soinside.com 2019 - 2024. All rights reserved.