[WebService] Found element {} name but could not find matching RPC/Literal p

无双Rama 2012-03-08
最近在做一个东西,用spring + cxf实现,在代码中实现了读取soap.xml文件,发送请求调用webservice方法,并且可以成功获取返回的soap消息,但是我改成在代码中拼接soap消息然后发送时,就报错:
Found element {http://demo.other/}name but could not find matching RPC/Literal part
 public void soapOperWebPage(HttpServletRequest request, HttpServletResponse response)
    throws UnsupportedOperationException, SOAPException, Exception
    {
        SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection connection = connectionFactory.createConnection();
        String encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage message = messageFactory.createMessage();
        SOAPPart soapPart = message.getSOAPPart();
        
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.removeNamespaceDeclaration("SOAP-ENV");
        envelope.setPrefix("soap");
        
        SOAPHeader header = envelope.getHeader();
        header.setPrefix("soap");
        SOAPBody body = envelope.getBody();
        body.setPrefix("soap");
//        body.setEncodingStyle(encodingStyle);

//        soapPart.
        // 添加body
        SOAPElement bodyElement = body.addChildElement(new QName("http://demo.other/", "getUserByName", "ns1"));
        SOAPElement memberElement = bodyElement.addChildElement("name", "ns1").addTextNode(request.getParameter("username"));

        File reqFile = new File("D:\\jay\\reqSOAP.xml");
        OutputStream reqSoap = new FileOutputStream(reqFile);
        
        File respFile = new File("D:\\jay\\respSOAP.xml");
        OutputStream respSoap = new FileOutputStream(respFile);
        
        message.saveChanges();
        System.out.println("\nREQUEST:\n");

        message.writeTo(reqSoap);
        System.out.println(message.toString());
        // 发送消息
        SOAPMessage reply = connection.call(message, ADDRESS);
                    
        System.out.println("\nRESPONSE:\n");
        reply.writeTo(response.getOutputStream());
        reply.writeTo(respSoap);
        
        System.out.println(reply.toString());
        connection.close();
    }
无双Rama 2012-03-08
打断点看一下 RPCInInterceptor.class里面第170行不通过
 if(!qn.equals(part.getConcreteName()))


qn 值是{http://demo.other/}name ,而part.getConcreteName()值是 name
无双Rama 2012-03-08
拼接的soap消息格式:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body>
		<ns1:getUserByName xmlns:ns1="http://demo.other/">
			<ns1:name>jaychou</ns1:name>
		</ns1:getUserByName>
	</soap:Body>
</soap:Envelope>


返回的消息:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<soap:Fault>
			<faultcode>soap:Server</faultcode>
				<faultstring>
				Found element {http://demo.other/}name but could not find matching RPC/Literal part
				</faultstring>
			</soap:Fault>
	</soap:Body>
</soap:Envelope>
无双Rama 2012-03-08
我把发送前拼接的soap以文件的方式放在本地用流读取进来,然后发送出去,却可以正确执行!! 这是最奇怪的地方

请各位大大指点一下,谢谢
无双Rama 2012-03-09
这个群组也太冷清了吧~~~都没人回复呀
wanghuanqiu 2012-03-09
  <ns1:name>jaychou</ns1:n>应该不需要命名空间的
直接<name>jaychou</name>。我没有自己拼过xml文件,自己试一下吧 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"这个要加一下
无双Rama 2012-03-12
wanghuanqiu 写道
  <ns1:name>jaychou</ns1:n>应该不需要命名空间的
直接<name>jaychou</name>。我没有自己拼过xml文件,自己试一下吧 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"这个要加一下

非常感谢!
eric474470 2013-09-12
大侠,这个问题解决了吗?
我遇到了同样的问题
对方是axis1.0的 调用我这边cxf的方法
结果就出现了上面的问题。
如果解决请指教? 我的邮箱zhyguyun0501@126.com   谢谢
无双Rama 2013-09-12
eric474470 写道
大侠,这个问题解决了吗?
我遇到了同样的问题
对方是axis1.0的 调用我这边cxf的方法
结果就出现了上面的问题。
如果解决请指教? 我的邮箱zhyguyun0501@126.com   谢谢

就是楼上的楼上的说的那样,就解决了
Global site tag (gtag.js) - Google Analytics