DHL-SOAP API中的身份验证



我想做一个CreateShipmentOrderRequest调用,不幸的是我总是得到一个响应"login failed"

我认为XML头中指定的身份验证缺失:

<soapenv:Header>
<cis:Authentification>
<cis:user>2222222222_01</cis:user>
<cis:signature>pass</cis:signature>
</cis:Authentification>
</soapenv:Header>

调用:

GVAPI20De service = new GVAPI20De();
GKV3XAPIServicePortType port = service.getGKVAPISOAP11Port0();

Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, CvpConstants.DHL_WSDL);
req_ctx.put("javax.xml.ws.client.connectionTimeout", "60000");
String userpassword = CvpConstants.DHL_USER + ":" + CvpConstants.DHL_PASSWORD;
String encodedAuthorization = Base64.encode(userpassword.getBytes());

Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Authorization", Collections.singletonList("Basic " + encodedAuthorization));

req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
CreateShipmentOrderResponse createShipmentOrder = port.createShipmentOrder(request);

如何将这个header添加到soap调用中?

Benjamin mller在以下链接下给出了您的问题的答案。一些对象(实际上只有名称)仍然需要调整。

Java WSDL DHL Classes

必须使用下一行下面的两行,否则身份验证将不起作用。

//覆盖BasicAuth用户名和密码

这是DHL不会拒绝"SECURITY_VIOLATION""请求的唯一方法。其他所有方式均未经DHL批准,并导致错误信息。