У меня есть веб-сервис, для которого я пытаюсь создать клиент.
У меня есть следующий wsdl:
http://www.cmicdataservices.com/datacenter/service.asmx?wsdl
Требуется аутентификация. Глядя на описание WSDL, я не вижу метода, который принимает объект аутентификации, ни имя пользователя и пароли в качестве аргументов. Используя NetBeans, я сгенерировал jax-ws-источники для WSDL. Однако я не могу понять, что делать после этого.
Используя soapui, я могу подключиться к веб-сервису и запустить все методы. Но еще раз, я хочу встроить это в клиента, который может быть запущен без моего взаимодействия.
Моя проблема заключается в том, чтобы выяснить, как использовать этот сгенерированный код, который, по-видимому, был на сайте netbeans.tv (видео плагина netbeans soapui 2), который с тех пор был потерян. Кто-нибудь знает какие-либо учебные пособия или знает какие-либо примеры того, как я могу использовать этот сгенерированный код для доступа к веб-сервису?
поэтому у меня есть метод CheckifAuthorized ()
Работая в soapui, я получаю следующий 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>
Затем я могу запустить этот запрос в soap ui и получить ответ, что аутентификация прошла успешно.
С кодом jax-ws, сгенерированным с помощью netbeans, а также с soapui, у меня есть следующее:
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();
}
}
Это произойдет со следующей ошибкой
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
Это та же проблема, с которой я столкнулся при попытке использовать python для сервиса. С тех пор я решил использовать Java, так как чувствую, что могу быстрее выполнить анализ XML и создание объектов, поскольку у меня уже есть объекты для этого.
Спасибо.
Grant
Я не хотел отвечать на это, потому что я все еще хотел бы выяснить, что я могу сделать здесь, но я только что закончил писать запрос от руки со следующим. Теперь я могу просто преобразовать это в объект xml и пойти своим путем, но я думаю, что soapui делает все это намного проще. Что я действительно не понимаю, так это как использовать soapui для создания этого запроса и включения его в мой проект:
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);
}
}