2013-05-08 3 views
0

Я хочу использовать веб-службу .asmx SOAP из java путем отправки и объекта. Служба также использует базовую аутентификацию. Я успешно собрал объект в xml и попытался отправить с использованием ниже методов.java soap asmx basic authentication

Я попытался следующие методы, чтобы сделать то же самое:

URL url = new URL("https://api.sandbox.ewaypayments.com/Soap.asmx?wsdl"); 
httpURLConnection = (HttpURLConnection) url.openConnection(); 
httpURLConnection.setRequestProperty("Authorization", "Basic " + encodedString); 
httpURLConnection.setRequestMethod("POST"); 
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(xml.length())); 
httpURLConnection.setRequestProperty("Content-Type", "text/xml"); 
httpURLConnection.setRequestProperty("SoapAction", ""); 
httpURLConnection.setDoInput(true); 
httpURLConnection.setDoOutput(true); 
httpURLConnection.setUseCaches(false); 
httpURLConnection.setRequestProperty("Content-Type", "text/xml"); 
PrintWriter pw = new PrintWriter(httpURLConnection.getOutputStream()); 
pw.write(postParameter); 
pw.flush(); 
BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); 
String line = ""; 
while ((line = br.readLine()) != null) 
{ 
    responseMessage.append(line); 
} 


Call call = new Call("https://api.sandbox.ewaypayments.com/Soap.asmx"); 
call.setOperationName(new QName("https://api.sandbox.ewaypayments.com/", "CreateAccessCode")); 
call.setSOAPActionURI("https://api.sandbox.ewaypayments.com/CreateAccessCode"); 
String strResult = (String) call.invoke(new Object[] { new CreateAccessCodeRequest()}); 

Но я получаю 500 Ошибки с сервера из указанных выше способов. Я знаю, что на стороне сервера нет проблем, потому что php-вызовы работают нормально. Я просто не могу заставить его работать с java. Пожалуйста, помогите.

ответ

0

Я достиг некоторого прогресса, используя следующий метод и сумел удалить эту ошибку.

String loginPassword = username + ":" + password; 
String encodedString = Base64.encodeBase64String(loginPassword.getBytes()); 
String xmlData = ""; 
String data = ""; 
BufferedReader br1 = new BufferedReader(new FileReader("D:\\reqfile.xml")); 
while ((data = br1.readLine()) != null) 
{ 
    xmlData += data; 
    System.out.println(data); 
} 

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
dbFactory.setNamespaceAware(true); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(new File("D:\\reqfile.xml")); 

SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

MessageFactory messageFactory = MessageFactory.newInstance(); 
SOAPMessage soapMessage = messageFactory.createMessage(); 

soapMessage.getMimeHeaders().addHeader("Authorization", "Basic " + encodedString); 
soapMessage.getMimeHeaders().addHeader("SOAPAction", "https://api.ewaypayments.com/CreateAccessCode"); 

SOAPPart soapPart = soapMessage.getSOAPPart(); 
SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); 

SOAPBody soapBody = soapEnvelope.getBody(); 
soapBody.addDocument(doc); 

soapMessage.saveChanges(); 

SOAPMessage reply = soapConnection.call(soapMessage, "https://api.sandbox.ewaypayments.com/Soap.asmx"); 

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
Source sourceContent = reply.getSOAPPart().getContent(); 
StreamResult result = new StreamResult(System.out); 
transformer.transform(sourceContent, result); 

Теперь сервер возвращает мне следующую ошибку:

мыло: Клиент Bad Аргументы

Я не смог найти какие аргументы неверны. Есть ли способ узнать точное описание сообщения об ошибке? Я тестировал его в SoapUI, и я получил ту же ошибку, но также дал мне некоторое описание об этой ошибке, и из-за этого мне пришлось решить ошибку в SoapUI и получить правильный ответ. Но я не могу сделать то же самое с использованием кода.

+0

Вы нашли что-то? – ihebiheb