xfire1.2.6在weblogic平台上传输二进制数据的时候报错误的解决方案

xfire1.2.6在 weblogic下传输二进制数据的时候报异常的解决方案,最近手头上负责一个邮件发送接口项目,需要通过webpower来实现发送邮件,对外提供一个接口。通讯通过webservice来做,文件传输通过byte[]数组。项目进行到最后的测试阶段,突然发现原来在tomcat能够后进行附件发送的程序在weblogic不能用了。具体问题如下:

在weblogic服务器上传输byte类型字段是会报:
java.lang.UnsupportedOperationException
 at weblogic.xml.stax.XMLStreamReaderBase.getTextCharacters(XMLStreamReaderBase.java:515)
 at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getTextCharacters(DepthXMLStreamReader.java:180)
 at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getTextCharacters(DepthXMLStreamReader.java:180)
 at org.codehaus.xfire.aegis.type.basic.Base64Type.readObject(Base64Type.java:74)
 at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)
 at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)
 at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)
 at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)
 at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
 at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
 at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
 at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
 at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
 at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
 at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
 at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(Unknown Source)
 at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
 at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
 at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

 

解决办法:

我通过把webservice接口方法的byte参数改成String参数来解决这个问题。

把接口方法的byte类型改成String类型。再通过byte数组转成String传入webService接口,后台接收把String再转成byte
代码如下:

  BASE64Encoder encoder = new BASE64Encoder();
  String base64 = encoder.encode(buffer);

 //调用接口方法传入参数

  MailService service = new MailService();
  MailServicePortType mailServicePortType = service.getMailServiceHttpPort();
  * @param subject  mail主题
  * @param content  内容
  * @param accept  接收邮件人
  * @param files  字符流 (附件不得超过5M)
  * @param fileName 附件名称(强烈建议用英文名)
  * @param sys 来源系统
  * @param priority 优先级别

  boolean flg =  mailServicePortType.sendEmailToFiles(subject, content, accept, base64, "test.pdf", sys, priority);

 

//后台接口接收

byte[] bt = null;
  try {
   bt = new sun.misc.BASE64Decoder().decodeBuffer(files.trim());
  } catch (IOException e1) {
   e1.printStackTrace();
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值