У меня есть этот фрагмент кода, который я пытаюсь передать SOAPMessage от клиента на сервер через сокеты (Нет, я не могу использовать Connection для этого).С закомментированными частями он работает нормально. Однако, когда я раскомментирую эти части, он зависает на стороне сервера, когда я вызываю метод writeTo.
В сторону: даже с закомментированным кодом, но на клиентесторона, я Thread.sleep вместо того, чтобы закрыть сокет, он висит на стороне сервера, что происходит?
Код клиента:
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapRequest = messageFactory.createMessage(),
soapResponse = messageFactory.createMessage();
SOAPPart soapPart = soapRequest.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
SOAPBody soapBody = soapEnvelope.getBody();
SSLSocket clientSocket = connect( "localhost" );
OutputStream outputStream = clientSocket.getOutputStream();
// Send Request
SOAPElement soapElement = soapBody.addChildElement( soapEnvelope.createName( "getPrice" , "ns1", "urn:xmethods-BNPriceCheck" ) );
soapElement.addChildElement( "isbn" ).addTextNode( "0672324229" );
soapRequest.saveChanges();
System.out.println( "\nREQUEST:\n" );
soapRequest.writeTo( System.out );
System.out.println();
soapRequest.writeTo( outputStream );
outputStream.flush();
// Recv Response
// soapPart = soapResponse.getSOAPPart();
// soapPart.setContent( new StreamSource( clientSocket.getInputStream() ) );
// soapResponse.saveChanges();
//
// System.out.println( "\nRESPONSE:\n" );
// soapResponse.writeTo( System.out );
// System.out.println();
clientSocket.close();
Код сервера:
// Initialize
clientSocket = getClientSocket();
outputStream = clientSocket.getOutputStream();
parameter = getParameter();
messageFactory = MessageFactory.newInstance();
// Recv Request
soapRequest = messageFactory.createMessage();
soapPart = soapRequest.getSOAPPart();
soapPart.setContent( new StreamSource( clientSocket.getInputStream() ) );
soapRequest.saveChanges();
System.out.println( "\nREQUEST:\n" );
soapRequest.writeTo( System.out ); // Hangs here
System.out.println();
// Send Response
// soapResponse = messageFactory.createMessage();
// soapPart = soapResponse.getSOAPPart();
// soapEnvelope = soapPart.getEnvelope();
// soapBody = soapEnvelope.getBody();
// soapElement = soapBody.addChildElement( soapEnvelope.createName( "getPrice" , "ns1", "urn:xmethods-BNPriceCheck" ) );
// soapElement.addChildElement( "isbn" ).addTextNode( "0672324230" );
// soapResponse.saveChanges();
//
// System.out.println( "\nRESPONSE:\n" );
// soapResponse.writeTo( System.out );
// System.out.println();
//
// soapResponse.writeTo( outputStream );
// outputStream.flush();
//
// clientSocket.close();