soap64Binary在soap web服务中

时间:2016-08-24 18:23:16

标签: java web-services soap-client restlet webservice-client

调用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解析后构建。它有SessionNumSessionPassword(声明为byte[])字段。

1 个答案:

答案 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"));

希望它有所帮助,