2016-08-24 50 views
0

调用SOAP Web服务的应用程序。一个XML元素的期待的数据类型为base64Binarybase64肥皂web服务中的二进制文件

<sessionPassword>base64Binary</sessionPassword> 

1.I可以读取它,而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制作等之后,我面临着不能@ 79be0360转换[B到System.Byte。

请提出任何建议。 仅供参考我正在使用restlet进行uri调用。 仅供参考XmlHandler是一个pojo类,在xml解析之后构建。它有SessionNum,SessionPassword(声明为byte[])字段。

回答

0

关于你的第一个问题,取决于你的xsd的豆代表。有一些引擎在内部编码解码到base64set \ get方法被调用的字段为base64Binary类型,但还有一些不会为您执行此操作。因此,取决于实施可能需要在调用setSessionPassword()之前编码password

关于你的第二个问题,如果sessionPassword声明您POJO里面如下:

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

然后后续的行不工作,你希望:

xmlHandler.getSessionPassword().toString() 

因为byte类型不覆盖toString()方法,因此getSessionPassword().toString()正在返回[[email protected]这不是正确的值(请参阅this question t o有关默认toString()行为的更多信息)。

解决你的问题,你已经使用了如下代码,而不是调用toString()

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

希望它能帮助,