HashMap через SOAP с Java на PHP и обратно

я столкнулся с небольшой проблемой и не могу найти решение. Ситуация:

  • У меня есть Java-Webservice, содержащий различные методы. Один из них создает новый объект (называемый «Bestellung», который является немецким для «Order»). Этот объект содержит некоторые атрибуты, большинство из которых – это строки, один – это хашмап с именем «applikationsDaten» (данные приложения).
  • Я получаю этот объект в php через SoapClient – все атрибуты заполняются так, как я их хочу. print_r() показывает следующее (сокращенное к соответствующим частям):
     Объект stdClass (
       [enthMWsT] => 0
       [preisStreckeGesamt] => 28.6
       [waehrung] => EUR
       [applikationsDaten] => stdClass Object (
       [entry] => Array (
         [0] => Массив ([ключ] => тест [значение] => 1)
         [1] => Массив ([ключ] => fahrDrucken [значение] => 1)
         [2] => Массив ([ключ] => fahrLfdnr [значение] => 0)
       )
     )
  • после манипуляции некоторыми атрибутами (но не с данными приложения) я пытаюсь отправить этот объект обратно в свой веб-сервис, который должен проверить некоторые вещи и сохранить заказ в базе данных. Здесь возникает проблема: все атрибуты получены отлично, но данные приложения отсутствуют. Когда я пытаюсь System.out.print() , я получаю следующее:
 [STDOUT] {[ключ: null] = [значение: null], [ключ: null] = [значение: null], [ключ: null] = [значение: null]}

как вы можете видеть, это число элементов правильно, но все ключи имеют значения null .

моя проблема: почему я не получаю правильные ключи / значения на стороне java?

PS: если вам нужна дополнительная информация, чтобы проанализировать это, пожалуйста, не стесняйтесь спрашивать

РЕДАКТИРОВАТЬ:

на java-стороне я запускаю jBoss 4.2.2GA

на PHP-стороне я использую объект SoapClient следующим образом:

 $conf['soap_wsdl'] = "http://192.168.0.213:8180/R1WebService/Service?wsdl"; $conf['soap_timeout'] = 5; $soap = new SoapClient($conf['soap_wsdl'], array('connection_timeout' => $conf['soap_timeout'])); $bst = $soap->getBestellung()->return; // some stuff $return = $soap->saveBestellung(array($bst))->return; 

Я нашел решение: проблема была в моем java-коде. недостаточно объявить хэш-файл в объекте следующим образом:

 private HashMap applikationsDaten; public HashMap getApplikationsDaten() { return applikationsDaten; } public void setApplikationsDaten(HashMap applikationsDaten) { this.applikationsDaten = applikationsDaten; } 

чтобы заставить его работать, мне пришлось указывать типы данных для Hashmap следующим образом:

 private HashMap<String,String> applikationsDaten; public HashMap<String,String> getApplikationsDaten() { return applikationsDaten; } public void setApplikationsDaten(HashMap<String,String> applikationsDaten) { this.applikationsDaten = applikationsDaten; } 

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

PS: благодаря ZeissS за его намеки.