передать двумерный массив в качестве параметра в веб-сервисе на java

#java #web-services

#java #веб-сервисы

Вопрос:

Я пытаюсь создать веб-сервис на Java, в котором вы передаете двумерный массив в качестве параметра. Когда я тестирую его с помощью веб-сервиса explore, я продолжаю получать эту ошибку:

 <soapenv:Fault>
  <faultcode>soapenv:Server.userException</faultcode> 
  <faultstring>org.xml.sax.SAXException: Found character data inside an array element while deserializing</faultstring> 
- <detail>
  <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">Name</ns1:hostname> 
  </detail>
</soapenv:Fault>
  

Есть идеи относительно того, почему?

Ответ №1:

Вам лучше всего обернуть свой двумерный массив внутри объекта, и даже тогда используйте что-то вроде ArrayList вместо фактического массива. Это лучше работает с веб-сервисами с Java и вашими привязками JAXB.

 public class MyTwoDimensionalArrayWrapper {
  private Collection dimensionOne = new ArrayList();
  private Collection dimensionTwo = new ArrayList();

  ...
  //getters and setters, etc.
  //note I did not put any annotations on this..just a skeleton to give you an idea to help.
}
  

Комментарии:

1. Как это должно быть двумерным массивом?

2. Это оболочка вокруг двух «массивов», то есть коллекций. Они должны быть синхронизированы друг с другом, но объект-оболочка может помочь справиться с этим. Если вы хотите, вы могли бы добавить другие коллекции, чтобы сделать его n-мерным. Исходя из моего опыта работы с веб-сервисами, любая форма массива лучше всего создается через объект-оболочку (особенно если вы используете более старые API JAX-RPC). Может потребоваться дополнительная работа. Но это устраняет МНОГО головной боли, ИМХО.

3. Извините, но какой был бы хороший способ синхронизировать это. Я имею в виду, что вы не можете добавить элемент в [1] [2] и [2][2], если вы делаете это таким образом, правильно?

4. В какую бы позицию вы ни добавили объект в первой коллекции, вы добавляете его во вторую коллекцию. Таким образом, первая коллекция [1] и первое местоположение [1] означают [1][1]. Вторая коллекция [2] и первое местоположение — [1], так что это означает [2][1]. Итак, если вы хотите, чтобы тот же объект или похожие объекты добавлялись одновременно, вы могли бы сделать следующее: public add (Object obj1, Object obj2), а затем добавить объект one в любое место, которое вы хотите (по умолчанию доступно next), а затем добавить второй объект во вторую коллекцию (т. Е. в следующее измерение). Имеет смысл?

5. Для меня это не имеет смысла. Каков ваш алгоритм для представления таблицы размером n ^ 2 с двумя списками размером n?