【问题标题】:Consuming SOAP service with RestTemplate (POST) throwing 405 Method Not allowed使用带有 RestTemplate (POST) 的 SOAP 服务抛出 405 Method Not allowed
【发布时间】:2020-02-11 20:37:44
【问题描述】:

我正在尝试使用 Java 中的 Spring RestTemplate 中的肥皂服务。我添加了一些标头和请求参数并将其分派到 PostForEntity 方法中,但它的抛出 405 方法不允许

我知道服务器将此调用作为 GET 的原因,但是它只能是发布的。 我试图更改我的标题并更改了我的请求,但没有取得任何成果。有人可以建议我的方法/代码有什么问题吗?


        String host = "172.18.101.2";
        String port = "80";

        System.out.println("Using proxy: " + host + ":" + port);
        System.setProperty("https.proxyHost", host);
        System.setProperty("https.proxyPort", port);

        SSLUtilities.trustAllHostnames();
        SSLUtilities.trustAllHttpsCertificates();

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.TEXT_XML);
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.add("SOAPAction", "http://ApiConnectFTwsdlDefinition/FundsTransfer");
        headers.add("X-IBM-Client-Id", "0146b9a4-7e99-4c83-8e9e-6049cfec55da");
        headers.add("Authorization", "Bearer AAIkMDE0NmI5YTQtN2U5OS00YzgzLThlOWUtNjA0OWNmZWM1NWRhV8EJd7oTPaijRicPTNxSH_h21meA_4h3Ty_QDOoXXRPC2f_MLk0BLBx4Q0DWZMHTfwTwur3BaiiF7y9uFcCkkj8fuTGK_yujrtuRY-4AZMK8hRPSppw3HhKYR84R9c9Wy9j6czOKqUklfLO6Zgb19A");

        MultivaluedMap body = new MultivaluedHashMap();     

        JSONObject requestObj = new JSONObject();           

        requestObj.put("SystemName", "CDC");
        requestObj.put("RequestID", "222");
        requestObj.put("TenantID", "abc11323===+");
        requestObj.put("CreditAccount", "0010000108290010");
        requestObj.put("DebitAmount", "100");
        requestObj.put("MappingID", "Remarks");
        requestObj.put("Narration", "remarks");

        body.add("data", requestObj.toString());

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.postForEntity("https://221.120.211.69:443/abl-api/uat/ApiConnectFTwsdlDefinitionHttpService?wsdl", requestObj.toString(), String.class);

        System.out.println("Status Code >>> " + response.getStatusCode());

【问题讨论】:

    标签: java rest resttemplate


    【解决方案1】:

    不要使用 RestTemplate 来消费 SOAP 服务,使用 spring web services client

    【讨论】:

    • 我也使用过 HTTPURLConnection 和 Jersey。但还是一样的反应。您能建议对现有代码进行任何更改吗?
    • 我可以在您的代码中看到的几个问题是 - 首先,您将内容类型设置为 xml 并发布 json,我不确定它在另一端是如何处理的,其次,您没有添加标题对于请求,它只是简单地声明并且从未使用过,即使是MultivaluedMap 正文。在这两种情况下,它应该抛出 415 而不是 405。考虑到我提到的上述两件事,我已经尝试使用 RestTemplate 来访问公共 SOAP api,它工作正常。
    • 我已经在 postforentity 方法(第二个参数)中发送了请求头。 json对象就是请求头。
    • 至少在您发布的代码中,我可以看到第二个参数是 json 对象本身,而 json 对象没有标题,它有数据,并且标题在 HttpHeaders 中从未使用过。如果您需要与标题一起发布数据,您的第二个参数应该是 HttpEntity ,您可以像这样创建 - HttpEntity&lt;String&gt; entity = new HttpEntity&lt;&gt;(requestObj.toString(), headers);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多