Java WSDL DHL Classes

I have create Java Classes from the DHL WSDL

Now i have all Classes, but no Authentifaction Class. I try this

 GKVAPIServicePortTypeProxy port2 = new GKVAPIServicePortTypeProxy();

     CreateShipmentOrderRequest sh = new CreateShipmentOrderRequest();
        //Setting up shipment;
        .. and so on

        CreateShipmentOrderResponse chr = port2.createShipmentOrder(sh);

But only what i get is, "(401)Authorization Required" How can i set my Authentifiaction ?

1 answer

  • answered 2018-10-11 21:48 JGlass

    Using basic authentication, you would first Base64 encode your username:password - there's online sites that will do it but beware as likely not a good idea to do it if it refers to DHL in anyway, e.g. they could swipe your credentials.
    You then get the Request Context of the port, create a map of the headers and add an Authorization header. Finally you add that back to the request context.

    Example: Note, I purposely generated bad base64 encoding so you would likely not be able to decode it and see it properly formatted with the "username:password"

            GVAPI20De service1 = new GVAPI20De();
            GKVAPIServicePortType port2 = service1.getGKVAPISOAP11Port0();
            CreateShipmentOrderRequest sh = new CreateShipmentOrderRequest();
            //Setting up shipment;
            Map<String, Object> req_ctx = ((BindingProvider)port2).getRequestContext();
            //you may not need this and can try commenting it out
            req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "");
            //optional timeout
            req_ctx.put("", "60000");
            Map<String, List<String>> headers = new HashMap<String, List<String>>();
            headers.put("Authorization", Collections.singletonList("Basic c3gh567sd4689k11lg=="));
            req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
            CreateShipmentOrderResponse chr = port2.createShipmentOrder(sh)