通过SOAP从Java到PHP再返回的HashMap

oez*_*ezi 4 php java wiki soap web-services

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

  • 我有一个包含不同方法的Java Webservice。其中之一创建一个新的对象(名为“ Bestellung”,德语为“ Order”)。该对象包含一些属性,其中大多数是字符串,一个是名为“ applikationsDaten”的Hashmap(应用程序数据)。
  • 我正在通过SoapClient在php中接收此对象-所有属性都按我的要求填写。print_r()显示以下内容(简化为相关部分):
    stdClass对象(
      [enthMWsT] => 0
      [preisStreckeGesamt] => 28.6
      [waehrung] => EUR
      [applikationsDaten] => stdClass对象(
      [entry] => Array(
        [0] =>数组([键] =>测试[值] => 1)
        [1] =>数组([key] => fahrDrucken [value] => 1)
        [2] =>数组([key] => fahrLfdnr [value] => 0)
      )
    )
  • 在操纵了某些属性(但不是应用程序数据)之后,我试图将该对象发送回我的Web服务,该服务应检查一些内容并将订单保存到数据库。这就是问题所在:所有属性都被完美接收,但应用程序数据却未被接收。当我尝试这样System.out.print()做时,我得到以下信息:
[STDOUT] {[键:空] = [值:空],[键:空] = [值:空],[键:空] = [值:空]}

如您所见,它的元素是正确的,但是所有键的值都是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;
Run Code Online (Sandbox Code Playgroud)

oez*_*ezi 5

我找到了解决方案:问题出在我的Java代码中。像这样在对象中声明哈希图是不够的:

private HashMap applikationsDaten;

public HashMap getApplikationsDaten() {
    return applikationsDaten;
}

public void setApplikationsDaten(HashMap applikationsDaten) {
    this.applikationsDaten = applikationsDaten;
}
Run Code Online (Sandbox Code Playgroud)

为了使其工作,我必须像这样为Hashmap指定数据类型:

private HashMap<String,String> applikationsDaten;

public HashMap<String,String> getApplikationsDaten() {
    return applikationsDaten;
}

public void setApplikationsDaten(HashMap<String,String> applikationsDaten) {
    this.applikationsDaten = applikationsDaten;
}
Run Code Online (Sandbox Code Playgroud)

更改此设置并重新部署Web服务后,它按预期工作。我将保留这个问题并将其标记为社区Wiki,而不是将其删除-也许它可以帮助寻找相同失败的人。

PS:感谢ZeissS的提示。