soap-ui generierten code
Ich habe einen webservice, den ich versuche zu bauen, ein client für.
Habe ich die folgende wsdl:
http://www.cmicdataservices.com/datacenter/service.asmx?wsdl
Es erfordert Authentifizierung. Blick auf die WSDL-Beschreibung sehe ich keine Methode, die eine Authentifizierung Objekt, noch Benutzername und Passwort als Argumente. Mit Netbeans habe ich generiert jax-ws Quellen für die WSDL. Ich kann jedoch nicht herausfinden, was zu tun ist, nach, dass.
Mit soapui kann ich die Verbindung zum webservice und führen alle Methoden. Aber noch einmal, ich möchte diesen in einem client ausgeführt werden können, ohne meine Interaktion.
Mein problem kommt in herauszufinden, wie man diese generiert code, der es erscheint netbeans.tv hatte ein video(netbeans soapui-plugin, video 2), das seitdem verloren. Kennt jemand irgendwelche tutorials oder kennen Beispiele dafür, wie kann ich dieses generierter code zum Zugriff auf die webservice?
also ich habe eine Methode CheckifAuthorized()
Läuft in soapui bekomme ich die folgende xml -
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:cmic="http://www.cmicdataservices.com/">
<soap:Header>
<cmic:Authentication>
<!--Optional:-->
<cmic:UserName>username</cmic:UserName>
<!--Optional:-->
<cmic:Password>password</cmic:Password>
</cmic:Authentication>
</soap:Header>
<soap:Body>
<cmic:CheckIfAuthorized/>
</soap:Body>
</soap:Envelope>
Kann ich dann ausführen, dass die Anfrage in soap-ui und wieder die Antwort, dass die Authentifizierung erfolgreich war.
Mit der jax-ws generierten code mit netbeans und mit soapui als auch ich haben das folgende:
package javaapplication7;
/**
*
* @author grant
*/
public class Main {
public static void main(String[] args) {
Boolean result = checkIfAuthorized();
System.out.println("The result is: " + result);
}
private static boolean checkIfAuthorized() {
javaapplication7.CMICDatacenterService service = new javaapplication7.CMICDatacenterService();
javaapplication7.CMICDatacenterServiceSoap port = service.getCMICDatacenterServiceSoap();
return port.checkIfAuthorized();
}
}
Dies wird mit dem folgenden Fehler fehl
run:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Server was unable to process request. ---> Object reference not set to an instance of an object.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy30.checkIfAuthorized(Unknown Source)
at javaapplication7.Main.checkIfAuthorized(Main.java:24)
at javaapplication7.Main.main(Main.java:17)
Java Result: 1
Dies ist das gleiche problem ich lief in, wenn Sie versuchen, die Verwendung von python für den service. Seitdem habe ich erwählt, mit Java, da ich das Gefühl ich kann schneller turnaround auf das Parsen von xml und Objekte zu erstellen, wie ich bereits die Elemente für diese erstellt.
Danke.
Gewähren
Wollte ich nicht zu beantworten, denn ich würde noch gerne herausfinden, was ich hier tun kann, aber ich habe nur am Ende schreiben die Anforderung von hand mit der folgenden. Ich kann jetzt nur konvertieren Sie diese in ein xml-Objekt und gehen über meinen Weg, aber ich kann mir vorstellen soapui macht dies viel einfacher. Was ich wirklich nicht verstehe ist, wie soapui zum erstellen dieser Anfrage und integrieren es in meinem Projekt:
public class Main {
public final static String DEFAULT_SERVER =
"http://www.cmicdataservices.com/datacenter/service.asmx";
public final static String SOAP_ACTION =
"http://www.cmicdataservices.com/CheckIfAuthorized";
public static void main(String[] args) {
String server = DEFAULT_SERVER;
String UserName = "Username";
String Password="Password";
try{
URL url = new URL(server);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
connection.setRequestProperty("Host", "www.cmicdataservices.com");
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
//Uncomment the following and comment out the previous two lines to see your xml
//BufferedWriter wout = new BufferedWriter(new FileWriter("/tmp/testXML.xml"));
//Start writing soap request - Envelope
wout.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n");
wout.write("<soap12:Envelope ");
wout.write("xmlns:xsi=");
wout.write("'http://www.w3.org/2001/XMLSchema-instance' ");
wout.write("xmlns:xsd=");
wout.write("'http://www.w3.org/2001/XMLSchema' ");
wout.write("xmlns:soap12=");
wout.write("'http://www.w3.org/2003/05/soap-envelope'>\r\n");
//Soap request header start
wout.write("<soap12:Header>\r\n");
//Start writing soap request - Authentication
wout.write("<Authentication xmlns=");
wout.write("'http://www.cmicdataservices.com/'>\r\n");
wout.write("<UserName>" + UserName + "</UserName>\r\n");
wout.write("<Password>" + Password + "</Password>\r\n");
//End Authentication
wout.write("</Authentication>\r\n");
//End the header
wout.write("</soap12:Header>\r\n");
//Start writing the body
wout.write("<soap12:Body>");
wout.write("<GetCurrentDataVer1 xmlns=");
wout.write("'http://www.cmicdataservices.com/' />\r\n");
//End the Body
wout.write("</soap12:Body>\r\n");
//End the Envelope
wout.write("</soap12:Envelope>\r\n");
wout.flush();
wout.close();
//BufferedWriter fout = new BufferedWriter(new FileWriter("/tmp/testXMLResponse.xml"));
InputStream in = connection.getInputStream();
createFile(in, "/tmp/testXMLResponse.xml");
}
catch (IOException e) {
System.err.println(e);
}
}
public static void createFile(InputStream io, String fileName) throws IOException {
FileOutputStream fout = new FileOutputStream(fileName);
byte[] buf = new byte[256];
int read = 0;
while ((read = io.read(buf)) != -1){
fout.write(buf, 0, read);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem mit deinem code ist das fehlen von Authentifizierungs-element im SOAP-header. Werfen Sie einen Blick auf die WSDL, es sollte immer da sein:
Du server fehlschlägt, mit Ausnahme aufgrund fehlerhafter XML, wenn es keine Authentifizierung element in der CheckIfAuthorized Anfrage. Hier ist Beispiel-client in Python zu zeigen, die Idee von der Lösung des Problems, ich denke, es ist nicht ein problem für Sie zu konvertieren Sie es in Java.