HashMap通过SOAP从Java到PHP再返回

我面临一个小问题,无法找到解决方案。 情况:

  • 我有一个包含不同方法的Java-Webservice。 其中一个创建了一个新的Object(名为“Bestellung”,德语为“Order”)。 该对象包含一些属性,其中大多数是字符串,一个是名为“applikationsDaten”(应用程序数据)的Hashmap。
  • 我通过SoapClient在php中收到这个对象 – 所有属性都按我想要的方式填充。 print_r()显示以下内容(缩写为相关部分):
     stdClass对象(
       [enthMWsT] => 0
       [preisStreckeGesamt] => 28.6
       [waehrung] =>欧元
       [applikationsDaten] => stdClass对象(
       [entry] =>数组(
         [0] =>数组([key] => test [value] => 1)
         [1] =>数组([key] => fahrDrucken [value] => 1)
         [2] =>数组([key] => fahrLfdnr [value] => 0)
       )
     )
  • 在操作一些属性(但不是应用程序数据)后,我正在尝试将该对象发送回我的webservice,这应该检查一些事情并将Order保存到数据库。 这就是问题出现的地方:所有属性都被完美地接收,但应用程序数据却没有。 当我尝试System.out.print()时,我得到以下内容:
 [STDOUT] {[key:null] = [value:null],[key:null] = [value:null],[key:null] = [value: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代码中。 仅仅像这样在对象中声明hashmap是不够的:

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

为了使它工作,我必须为Hashmap指定数据类型,如下所示:

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

更改此内容并重新部署Web服务后,它按预期工作。 我将留下这个问题并将其标记为社区维基而不是删除它 – 也许它可以帮助某人寻找同样的失败。

PS:感谢ZeissS的提示。