Ошибка с использованием сокетов и мыла в Java - PullRequest
2 голосов
/ 12 января 2012

У меня есть этот фрагмент кода, который я пытаюсь передать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...