Невозможно отправить SOAP-запрос на публикацию bsemfstardemo.bseindia.com в Java - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался отправить данные в веб-службу SOAP, предоставленную bsestarmfdemo.bseindia.com.Но я получил следующую ошибку при попытке запустить сервис getPassword. Ошибка выглядит следующим образом: -

Feb 13, 2019 3:56:14 PM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0008: Bad Response; Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (415Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:149)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.callSoapWebService(SoapMessageTest.java:63)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.main(SoapMessageTest.java:30)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (415Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:264)
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145)
    ... 2 more

CAUSE:

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (415Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:264)
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.callSoapWebService(SoapMessageTest.java:63)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.main(SoapMessageTest.java:30)

CAUSE:

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (415Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:264)
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.callSoapWebService(SoapMessageTest.java:63)
    at com.bsoft.wv.bsestarmf.test.SoapMessageTest.main(SoapMessageTest.java:30)

Это мой класс Java, который я использовал для доступа к сервису getPassword, предоставляемому bsestarmf.bseindia..com: -

package com.bsoft.wv.bsestarmf.test;

import java.io.IOException;
import java.sql.Savepoint;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

/**
 * @author bosco
 *
 */
public class SoapMessageTest {

    public static void main(String[] args) {

        String soapEndPointUrl = "http://bsestarmfdemo.bseindia.com/MFUploadService/MFUploadService.svc/Basic";
        String soapActionUrl = "http://bsestarmfdemo.bseindia.com/2016/01/IMFUploadService/getPassword";
        callSoapWebService(soapEndPointUrl,soapActionUrl);
    }

    private static void createSoapEnvelope(SOAPMessage soapMessgae) throws SOAPException {
        SOAPPart soapPart = soapMessgae.getSOAPPart();

        //String myNameSpace = "http://www.w3.org/2003/05/soap-envelope";
        String myNameSpace  = "ns";
        String myNameSpaceURI = "http://bsestarmfdemo.bseindia.com/2016/01/";

        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration(myNameSpace, myNameSpaceURI);

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addChildElement("getPassword",myNameSpace);
        SOAPElement soapBodyElement2 = soapBodyElement.addChildElement("UserId",myNameSpace);
        SOAPElement soapBodyElement3 = soapBodyElement.addChildElement("MemberId", myNameSpace);
        SOAPElement soapBodyElement4 = soapBodyElement.addChildElement("Password", myNameSpace);
        SOAPElement soapBodyElement5 = soapBodyElement.addChildElement("PassKey", myNameSpace);
        soapBodyElement2.addTextNode("1236548");
        soapBodyElement3.addTextNode("12365");
        soapBodyElement4.addTextNode("Tester@1");
        soapBodyElement5.addTextNode("test@gmail.com");
    }

    private static void callSoapWebService(String soapEndPointUrl, String soapAction) {

        try {
            //SOAP Connection creation 
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            //Send SOAP message to SOAP server
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndPointUrl);

            //Print SOAP response...
            System.out.println("SOAP Response");
            soapResponse.writeTo(System.out);
            System.out.println();
            soapConnection.close();
        }  catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static SOAPMessage createSOAPRequest(String soapAction) throws SOAPException, IOException {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        createSoapEnvelope(soapMessage);
        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", soapAction);
        headers.addHeader("Content-Type", "application/soap+xml; charset=utf-8");
        headers.addHeader("Encoding", "UTF-8");
        soapMessage.saveChanges();
        System.out.println("Soap Body: "+soapMessage.getSOAPBody());
        System.out.println("Request SOAP Message");
        soapMessage.writeTo(System.out);
        System.out.println("\n");

        return soapMessage;
    }
}

Пожалуйста, дайте мне знать, где я допустил ошибку.Любая помощь будет оценена.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я изменил один из методов следующим образом, и он работал для меня.Большое спасибо!

private static SOAPMessage createSOAPRequest(String soapAction) throws SOAPException, IOException {
        //MessageFactory messageFactory = MessageFactory.newInstance();
        MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
        SOAPMessage soapMessage = messageFactory.createMessage();
        createSoapEnvelope(soapMessage);
        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", soapAction);
        headers.addHeader("Content-Type", "application/soap+xml; charset=utf-8");
        headers.addHeader("Encoding", "UTF-8");

        SOAPHeader header = soapMessage.getSOAPHeader();
        SOAPHeaderElement actionElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "Action"));
        actionElement.setMustUnderstand(true);
        actionElement.addTextNode(soapActionUrl);

        SOAPHeaderElement toElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "To"));
        toElement.setMustUnderstand(true);
        toElement.addTextNode(soapEndPointUrl);

        soapMessage.saveChanges();
        System.out.println("Soap Body: "+soapMessage.getSOAPBody());
        System.out.println("Request SOAP Message");
        soapMessage.writeTo(System.out);
        System.out.println("\n");

        return soapMessage;
    }
0 голосов
/ 13 февраля 2019

Похоже, сервер не совместим с SOAP 1.2.SOAP 1.2 ожидает ContentType application/soap+xml, но ваш сервер отправляет text/xml, который используется SOAP 1.1.

Вы можете попробовать использовать

MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);

для создания сообщения SOAP 1.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...