Wie fügen Sie eine Kopfzeile für die Web-Service-Client-Anfrage hinzu, die wie folgt aussieht: XML?
Das untenstehende XML ist eine Anfrage, die automatisch von der SOAP UI generiert wurde und funktioniert gut, wenn der Benutzername/das Passwort korrekt eingegeben wurde.Hinzufügen einer Kopfzeile zur Web-Service-Anfrage mit CXF
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dof="http://dof.ad.com">
<soapenv:Header>
<dof:UserCredentials>
<!--Optional:-->
<dof:userName></dof:userName>
<!--Optional:-->
<dof:password></dof:password>
</dof:UserCredentials>
</soapenv:Header>
<soapenv:Body>
<dof:CheckService/>
</soapenv:Body>
</soapenv:Envelope>
Ich würde gerne wissen, wie der Header-Teil mit Apache CXF hinzugefügt werden kann. Ich habe einen Code mit CXF aus WSDL automatisch generiert (siehe unten) und verschiedene Artikel überprüft, aber der Code funktioniert immer noch nicht. Ich gehe davon aus, dass die gesendete Anfrage nicht korrekt ist oder keine Kopfzeile hat.
public static void checkServiceMan() {
String address = "https://WSDL_URL";
JaxWsProxyFactoryBean jaxWsProxy = new JaxWsProxyFactoryBean();
jaxWsProxy.setServiceClass(DOFairservice.class);
jaxWsProxy.setAddress(address);
DOFairservice serviceClient = (DOFairservice) jaxWsProxy.create();
ObjectFactory factory = new ObjectFactory();
UserCredentials uc = factory.createUserCredentials();
uc.setUserName("username");
uc.setPassword("password");
List<Header> headerList = new ArrayList<Header>();
try {
Header testCredentialsHeader = new Header(new QName("http://DOF", "DOFairservice")
,uc
,new JAXBDataBinding(UserCredentials.class));
headerList.add(testCredentialsHeader);
} catch (JAXBException e) {
e.printStackTrace();
}
((BindingProvider) serviceClient).getResponseContext().put(Header.HEADER_LIST, headerList);
Client client = ClientProxy.getClient(serviceClient);
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = conduit.getClient();
policy.setReceiveTimeout(10000);
String resp = serviceClient.checkService(); **<--- ERROR HERE**
System.out.println("Response from Customs Web Service: "+ resp);
System.out.println("Web Service Header Test Done");
}
Fehlermeldung
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Error reading XMLStreamReader: Unexpected character '8' (code 56) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:161)
at com.sun.proxy.$Proxy45.checkService(Unknown Source)
at ae.abudhabi.dof.client.CheckServiceClient.checkServiceMan(CheckServiceClient.java:103)
at ae.abudhabi.dof.client.CheckServiceClient.main(CheckServiceClient.java:112)
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '8' (code 56) in prolog; expected '<'
wollte nur klarstellen, dass true extendedSoapHeaders> im Bereich festgelegt ist. –
lemonpro