Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用saaj在soap头中添加会话id_Java_Soap_Saaj - Fatal编程技术网

Java 使用saaj在soap头中添加会话id

Java 使用saaj在soap头中添加会话id,java,soap,saaj,Java,Soap,Saaj,我正在使用Php soap服务器和使用jax ws的java客户端。 如何在后续请求时在soap头中添加sessionId? 它的格式是什么 到目前为止,我做到了: String url = "http://localhost:8888/server/soap/server.php"; // login MessageFactory mf = MessageFactory.newInstance(); SOAPMessage request = mf.createMessage();

我正在使用Php soap服务器和使用jax ws的java客户端。 如何在后续请求时在soap头中添加sessionId? 它的格式是什么

到目前为止,我做到了:

String url = "http://localhost:8888/server/soap/server.php";

    // login

MessageFactory mf = MessageFactory.newInstance();
SOAPMessage request = mf.createMessage();
SOAPPart soapPart = request.getSOAPPart();
MimeHeaders headers = request.getMimeHeaders();
headers.addHeader("SOAPAction", url);              

SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("var", url);        

SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("call", "var");

SOAPElement action = soapBodyElem.addChildElement("action", "var");
action.addTextNode("LOGON");        

SOAPElement params = soapBodyElem.addChildElement("params", "var");       


SOAPElement uid = soapBodyElem.addChildElement("uid ", "var");
uid .addTextNode("tester");

SOAPElement password = soapBodyElem.addChildElement("password ", "var");
password .addTextNode("");

params.addChildElement(uid );
params.addChildElement(password);

request.saveChanges();

    /* Print the request message */
    System.out.print("Request SOAP Message:");
    request.writeTo(System.out);
    System.out.println();

    SOAPMessage response = soapConnection.call(request, url);
上面的请求可以工作,因为它处于登录阶段,即将获取会话id。但是后续的请求呢?

我找到了解决方案:

获取登录响应的cookie,并在下一个请求中设置它 cookie内容如下所示:

PHPSESSID=sqv184d99ndodebh4te9lmpji5; path=/
这是代码:

 MimeHeaders session = response.getMimeHeaders();     
 String []cookies = session.getHeader("Set-Cookie");             
 request.getMimeHeaders().addHeader("Cookie", cookies[0]);