调用SOAP Web服务的应用程序。其中一个xml元素期望数据类型为base64Binary
,如
<sessionPassword>base64Binary</sessionPassword>
1.我可以在sax解析时读取它:
setSessionPassword((new String(ch,start,length)).getBytes());
这是对的吗?
2.我需要将此密码字段传递给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()));
在第2点制作之后我面临无法将[B @ 79be0360转换为System.Byte。
请提出任何建议。
仅供参考我使用restlet进行uri调用。
FYI XmlHandler是一个pojo类,在xml解析后构建。它有SessionNum
,SessionPassword
(声明为byte[]
)字段。
答案 0 :(得分:0)
关于您的第一个问题,取决于您xsd
的bean表示。当为 base64Binary 类型的字段调用set
\ get
方法时,有一些内部编码\解码为 base64 的引擎,但还有另一个引擎那些不适合你的人。因此,在调用password
之前,依赖于实现可能需要对setSessionPassword()
进行编码。
关于第二个问题,如果{em> POJO 中的sessionPassword
声明如下:
public class yourPojo {
private byte[] sessionPassword;
...
public byte[] getSessionPassword(){
return sessionPassword;
}
}
然后跟进行没有按预期工作:
xmlHandler.getSessionPassword().toString()
由于byte
类型未覆盖toString()
方法,因此getSessionPassword().toString()
返回的[B@79be0360
不是正确的值(有关默认值的详情,请参阅this question toString()
行为)。
要解决您的问题,您必须使用以下代码,而不是调用toString()
:
_sessionPaswrd.replace("$2",new String(xmlHandler.getSessionPassword(),"UTF-8"));
希望它有所帮助,