【问题标题】:base64Binary in soap web service肥皂网络服务中的 base64Binary
【发布时间】:2016-08-24 18:23:16
【问题描述】:

应用程序调用 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 调用。 仅供参考 XmlHandler 是一个 pojo 类,在 xml 解析之后构建。它有SessionNumSessionPassword(声明为byte[])字段。

【问题讨论】:

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


    【解决方案1】:

    关于您的第一个问题,取决于您的 xsd 的 bean 表示。当为 base64Binary 类型的字段调用 set\ get 方法时,有一些引擎在内部编码\解码为 base64,但还有其他引擎不执行这是给你的。因此,在调用 setSessionPassword() 之前,可能需要对 password 进行编码,这取决于实现。

    关于你的第二个问题,如果sessionPassword 在你的POJO中声明如下:

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

    那么后续行没有按预期工作:

    xmlHandler.getSessionPassword().toString()
    

    因为byte 类型不会覆盖toString() 方法,所以getSessionPassword().toString() 返回的[B@79be0360 不是正确的值(有关默认toString() 行为的更多信息,请参阅this question)。

    要解决您的问题,您必须使用以下代码而不是调用toString()

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

    希望对你有帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2017-01-16
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      相关资源
      最近更新 更多