无法将字节数组发送到Axis上的JAX-WS Web服务

时间:2010-03-31 08:48:20

标签: java web-services jax-ws bytearray axis2

您好我举了一个小例子来说明我的问题。这是我的网络服务:

package service;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class BytesService {

 @WebMethod
 public String redirectString(String string){
  return string+" - is what you sended";
 }

 @WebMethod
 public byte[] redirectBytes(byte[] bytes) {
  System.out.println("### redirectBytes");
  System.out.println("### bytes lenght:" + bytes.length);
  System.out.println("### message" + new String(bytes));
  return bytes;
 }

 @WebMethod
 public byte[] genBytes() {
  byte[] bytes = "Hello".getBytes();
  return bytes;
 }

}

我将其打包在jar文件中并存储在“axis2-1.5.1 / repository / servicejars”文件夹中。然后我使用Eclipse为EE默认工具生成客户端代理。并以下列方式在我的代码中使用它:

  BytesService service = new BytesServiceProxy();
  System.out.println("Redirect string");
  System.out.println(service.redirectString("Hello"));
  System.out.println("Redirect bytes");
  byte[] param = { (byte)21, (byte)22, (byte)23 };
  System.out.println(param.length);
  param = service.redirectBytes(param);
  System.out.println(param.length);
  System.out.println("Gen bytes");
  param = service.genBytes();
  System.out.println(param.length);

以下是我的客户打印的内容:

Redirect string
Hello - is what you sended
Redirect bytes
3
0
Gen bytes
5

在服务器上我有:

### redirectBytes
### bytes lenght:0
### message

因此字节数组通常可以从服务转移,但不接受客户端。它适用于字符串。现在我使用Base64Encoder,但我不喜欢这个解决方案。

1 个答案:

答案 0 :(得分:0)

我怀疑问题在于将字节数组序列化为XML SOAP消息。原始SOAP消息中的XML标记可能是零字节。我建议使用SOAP监视器来查看发送到Web服务的消息。

您可能不喜欢在传输过程中对字节进行编码的想法,但是,您需要将其视为二进制数据。例如,如果有人向您发送了以UTF-8以外的其他方式编码的SOAP消息,该怎么办?在解析SOAP消息时,您将希望避免字节数组数据发生更改(字符集之间的转换)。