ᅟᅟᅟᅟᅟ 2021-10-21 12:50 采纳率: 100%
浏览 75
已结题

java调webServcie客户端报错 服务器发送了 HTTP 状态代码 405: Method Not Allowed

1.先用java自带的wsimport.exe 生成客户端代码
2.解决账户密码登录全限问题
3.解决域名解析错误
4.现在的问题是405

设置账号密码(静态代码块)

  setDefault(new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("账号",
                        "密码".toCharArray());
            }
        });

main方法测试
  try {
            String wsdlURL = "http:xxxxxxxxxxxxxxxxxxxxx/wsdl";
            SIQUERYPSPOUTSYNService siquerypspoutsynService = new SIQUERYPSPOUTSYNService();
//            SIQUERYPSPOUTSYN httpPort = siquerypspoutsynService.getPort(new QName("urn:chintelectric.com:xi:psp","HTTP_Port"), SIQUERYPSPOUTSYN.class);
            SIQUERYPSPOUTSYN httpPort = siquerypspoutsynService.getHTTPSPort();
            BindingProvider bindingProvider = (BindingProvider) httpPort;
            bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, wsdlURL);
            ObjectFactory objectFactory = new ObjectFactory();
            DTJSONREQ dtjsonreq = objectFactory.createDTJSONREQ();
            DTJSONREQ.JSONINFO jsoninfo = objectFactory.createDTJSONREQJSONINFO();
            jsoninfo.setDATA("{\"ID\":\"A005\",\"PSPID\":\"P1903709\"}");
            dtjsonreq.setJSONINFO(jsoninfo);
            DTJSONRSP dtjsonrsp = httpPort.siQUERYPSPOUTSYN(dtjsonreq);
            System.out.println("调用SAP询价WebService接口" + dtjsonrsp);
        } catch (Exception e) {
            e.printStackTrace();
        }

报错信息
```java
com.sun.xml.internal.ws.client.ClientTransportException: 服务器发送了 HTTP 状态代码 405: Method Not Allowed
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:310)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:259)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:217)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:130)
    at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:124)
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:1121)
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:1035)
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:1004)
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:862)
    at com.sun.xml.internal.ws.client.Stub.process(Stub.java:448)
    at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:178)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
    at com.sun.proxy.$Proxy30.siQUERYPSPOUTSYN(Unknown Source)
    at com.jdl.lomir.chint.adapter.http.service.SapQueryCustomerOrderService.main(SapQueryCustomerOrderService.java:72)

```

  • 写回答

2条回答 默认 最新

  • howsun_zh 2021-10-22 19:11
    关注

    服务端限定了GET请求,你使用了POST请求,改变请求头方法:

        //设置请求方法
        Map<String, Object> req_ctx = bindingProvider.getRequestContext();
        req_ctx.put(MessageContext.HTTP_REQUEST_METHOD, "GET");
    

    by 豪哥

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 10月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效