Не удалось отправить массив байтов в веб-сервис JAX-WS на Axis - PullRequest
0 голосов
/ 31 марта 2010

Привет, я сделал небольшой пример, чтобы показать мою проблему.Вот мой веб-сервис:

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 голосов
/ 02 апреля 2010

Я подозреваю, что проблема заключается в сериализации байтового массива в сообщение XML SOAP. Тег XML в исходном сообщении SOAP, возможно, имеет нулевые байты. Я бы рекомендовал использовать SOAP-монитор, чтобы взглянуть на сообщение, отправляемое на ваш веб-сервис.

Вам может не понравиться идея кодирования байтовой строки при передаче, однако вам необходимо учитывать это двоичные данные. Например, что если кто-то отправит вам сообщение SOAP с кодом, отличным от UTF-8? Вы захотите избежать возможности изменения данных байтового массива (преобразования между наборами символов) при анализе сообщения SOAP.

...