首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DHL Webservice安全问题

DHL Webservice安全问题
EN

Stack Overflow用户
提问于 2018-01-01 13:51:37
回答 1查看 515关注 0票数 0

我试图在这里连接DHL DHL wsdlhttps://standorte.deutschepost.de/webservice/?wsdl我正在使用的代码(只是试着测试它),我总是得到这个异常:

de.dpag.postfinder.webservice.ServiceException_Exception:访问被拒绝。访问密钥无效。

代码语言:javascript
复制
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import de.dpag.postfinder.webservice.AutomatWS;
import de.dpag.postfinder.webservice.InputAddress;
import de.dpag.postfinder.webservice.WebServiceImpl;
import de.dpag.postfinder.webservice.WebServiceImplService;

public class DHLWebService {

  public static void main(String[] args) throws Exception {
    InputAddress request = new InputAddress();

    request.setCountryCode("DE");
    request.setCity("Bonn");
    request.setStreet("harles-de-Gaulle-Str");
    request.setStreetNo("20");
    request.setZip("53113");
    List<AutomatWS> packstationsByAddress = new ArrayList<AutomatWS>();

    String wsdlLocation = "https://standorte.deutschepost.de/webservice/?wsdl";
    try {
      URL wsdlUrl = new URL(wsdlLocation);
      QName qName = new QName("http://postfinder.dpag.de/webservice", "WebServiceImplService");
      WebServiceImplService dhlClientService = new WebServiceImplService(wsdlUrl, qName);
      WebServiceImpl webServiceImplPort = dhlClientService.getWebServiceImplPort();
      Map<String, Object> req_ctx = ((BindingProvider) webServiceImplPort).getRequestContext();
      req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://standorte.deutschepost.de/webservice/?wsdl");
      Map<String, List<String>> headers = new HashMap<String, List<String>>();
      //sample username and password
      headers.put("Username", Collections.singletonList("test"));
      headers.put("Password", Collections.singletonList("test"));
      req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);

      packstationsByAddress = webServiceImplPort.getPackstationsByAddress("", request);
    } catch (Exception e) {
      e.printStackTrace();
    }
    for (AutomatWS automatWS : packstationsByAddress) {
      System.out.println(automatWS.getAddress());
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-06 15:36:41

我发现了这个问题,结束点需要在wsdl文件的末尾,如下所示:

代码语言:javascript
复制
<service name="WebServiceImplService">
<port name="WebServiceImplPort" binding="tns:WebServiceImplPortBinding">
<soap:address location="https://cig.dhl.de/services/sandbox/soap" />
</port>
</service>

然后,代码应该如下:

代码语言:javascript
复制
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;

import de.dpag.postfinder.webservice.AutomatWS;
import de.dpag.postfinder.webservice.InputAddress;
import de.dpag.postfinder.webservice.WebServiceImpl;
import de.dpag.postfinder.webservice.WebServiceImplService;

public class DHLWebService {


    //wsdl path
private static final String RELATIVE_WSDL_PATH = "";

public static void main(String[] args) throws Exception {
    InputAddress request = new InputAddress();
    request.setCountryCode("DE");
    request.setCity("Bonn");
    request.setStreet("harles-de-Gaulle-Str");
    request.setStreetNo("20");
    request.setZip("53113");
    List<AutomatWS> packstationsByAddress = new ArrayList<>();
    try {
        URL wsdlLocalURL = DHLWebService.class.getResource(RELATIVE_WSDL_PATH);
      QName qName = new QName("http://postfinder.dpag.de/webservice", "WebServiceImplService");
      WebServiceImplService dhlClientService = new WebServiceImplService(wsdlLocalURL,qName);
      WebServiceImpl webServiceImplPort = dhlClientService.getWebServiceImplPort();
       Map<String, Object> req_ctx = ((BindingProvider) webServiceImplPort).getRequestContext();
       // replace it with your username and password
       req_ctx.put(BindingProvider.USERNAME_PROPERTY, "test");
       req_ctx.put(BindingProvider.PASSWORD_PROPERTY, "test");

      packstationsByAddress = webServiceImplPort.getPackstationsByAddress("", request);
    } catch (Exception e) {
      e.printStackTrace();
    }
    for (AutomatWS automatWS : packstationsByAddress) {
      System.out.println(automatWS.getAddress());
    }
  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48050218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档