#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?