SOAPHandlerを使用せずに、WebサービスクライアントからのSoapリクエストにカスタムヘッダーを追加する方法が見つからないようです。私は代替案を探し回っていますが、BindingProviderがその仕事をしてくれているようです。しかし、それはうまくいきませんでした。ここで何が欠けているのかわかりません。リクエストを次のように表示します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://xx.xx.xx/xxx/provisioning/ws">
<soapenv:Header>
<ws:XXXSecurity xmlns:ws="http://xx.xx.xx/xx/security/ws">
<ws:Identification type="TrustedApplicationIdentification">
<ws:ApplicationId>xx</ws:ApplicationId>
</ws:Identification>
</ws:xxSecurity>
<ws:xxLocale xmlns:ws="http://xx.xx.xx/xx/presentation/webservice/locale">
<ws:clientLocale>en_US</ws:clientLocale>
</ws:xxLocale>
</soapenv:Header>
<soapenv:Body>
<ws:GetAllNonProvisionedServers/>
</soapenv:Body>
</soapenv:Envelope>
ここにコード:
Provisioning service = new Provisioning(url, qName);
ProvisioningPort servicePort = service.getProvisioningPort();
servicePort = service.getProvisioningPort();
Map<QName, List<String>> headersMap = new HashMap<QName, List<String>>();
String mySoapHeader = "<ws:Identification type=\"TrustedApplicationIdentification\">"
+ "<ws:ApplicationId>Password123$</ws:ApplicationId>"
+ "</ws:Identification>" ;//+ "</soapenv:Header>";
List<String> mySOAPHeaders = new ArrayList<String>();
mySOAPHeaders.add(mySoapHeader);
headersMap.put(qSecurityName, mySOAPHeaders);
System.out.println(MessageContext.HTTP_REQUEST_HEADERS);
BindingProvider bp = (BindingProvider) servicePort;
List<Server> findAllNonProvisionedServers = servicePort
.findAllNonProvisionedServers();