2016-08-24 2 views
0

Приложение, вызывающее веб-службы SOAP. Один из элементов XML ожидают типа данных как base64Binary какbase64Binary in soap web service

<sessionPassword>base64Binary</sessionPassword> 

1.I можно прочитать в то время как саксофон разбора, как:

setSessionPassword((new String(ch,start,length)).getBytes()); 

Правильно ли это?

2.I нужно передать это поле пароля URI, как это:

private static final String URI_BASE = "https://srini3000.com/Conversion/gateway.asmx/ASAPIDList?"; 
String _sessionNum = "sessionNum=$1&"; 
String _sessionPaswrd = "sessionPassword=$2&sessionPassword="; 

StringBuilder url = new StringBuilder(URI_BASE) ; 
url.append(_sessionNum.replace("$1",Integer.toString(xmlHandler.getSessionNum()))); 
url.append(_sessionPaswrd.replace("$2",xmlHandler.getSessionPassword().toString())); 

После того, как в point2 я столкнулся не удается преобразовать [B @ 79be0360 в System.Byte.

Любые предложения, пожалуйста. FYI Я использую restlet для вызова uri. FYI XmlHandler - класс pojo, созданный после разбора xml. он имеет SessionNum, SessionPassword (объявлено как byte[]).

ответ

0

О вашем первом вопросе, зависит от представления bean вашего xsd. Есть несколько двигателей, которые внутренне кодируют \ decode до base64, когда метод set \ get вызывается для полей base64Binary, но есть и другие, которые не выполняют этого для вас. Так что в зависимости от реализации может потребоваться кодирование password перед вызовом setSessionPassword().

О втором вопросе, если sessionPassword объявлен следующим образом внутри POJO:

public class yourPojo { 
    private byte[] sessionPassword; 
    ... 
    public byte[] getSessionPassword(){ 
     return sessionPassword; 
    } 
} 

Тогда последующая линия не работает, как вы ожидаете:

xmlHandler.getSessionPassword().toString() 

Поскольку byte типа не override toString(), поэтому getSessionPassword().toString() возвращает [[email protected], что является неправильным значением (см. this question t o больше информации о поведении toString()).

Чтобы решить проблему, вы, чтобы использовать код последующего вместо вызова toString():

_sessionPaswrd.replace("$2",new String(xmlHandler.getSessionPassword(),"UTF-8")); 

Надеются, что это помогает,