首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文的jDeveloper在调用外部web服务时似乎忽略了WSDL中的声明?

甲骨文的jDeveloper在调用外部web服务时似乎忽略了WSDL中的声明?
EN

Stack Overflow用户
提问于 2011-02-03 23:07:46
回答 1查看 1.3K关注 0票数 0

甲骨文的jDeveloper在调用外部web服务时似乎忽略了WSDL中的声明,我不确定为什么...?

我们正在尝试使用使用WSDL:http://tbe.taleo.net/wsdl/WebAPI.wsdl找到的第三方web服务

如果将其放入SoapUI并打开searchCandidate操作,您会发现请求结构如下所示。请注意,in1中包含一个<item>节点,该节点在WSDL中定义。

代码语言:javascript
复制
<urn:searchCandidate>
    <in0>?</in0>
    <in1>
        <!--Zero or more repetitions:-->
        <item>
            <key>?</key>
            <value>?</value>
        </item>
    </in1>
</urn:searchCandidate>

奇怪的是,当我们在jDeveloper中使用这个WSDL并调用searchCandidate操作时,出于某种原因,jdeveloper构建了以下xml soap消息。注意,<item>不在那里,而是<mapEntry>在它的位置上。

代码语言:javascript
复制
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:ns0="urn:TBEWebAPI"
              xmlns:ns1="http://xml.apache.org/xml-soap">
  <env:Body>
    <ns0:searchCandidate>
      <in0>STRING DATA</in0>
      <in1 xmlns:ans1="http://www.oracle.com/webservices/internal/literal"
            xsi:type="ans1:hashMap">
        <ans1:mapEntry xsi:type="ans1:mapEntry">
          <ans1:key xsi:type="xsd:string">HireDate</ans1:key>
          <ans1:value xsi:type="xsd:string">2011-12-31</ans1:value>
        </ans1:mapEntry>
        <ans1:mapEntry xsi:type="ans1:mapEntry">
          <ans1:key xsi:type="xsd:string">status</ans1:key>
          <ans1:value xsi:type="xsd:string">Hired</ans1:value>
        </ans1:mapEntry>
      </in1>
    </ns0:searchCandidate>
  </env:Body>
</env:Envelope>

下面是我们如何填充searchCandidate参数和调用web服务。这只是一个片段,因为从头到尾的整个过程都有点复杂,而且会把我想要传达的问题搞得一团糟。要测试这一点,我建议将webservice的端点更改为类似http://localhost:6667的内容,然后只嗅探http流量以查看soap消息,因为错误是在对web服务进行实际调用之前创建的,因此不需要完成对其服务器的调用。我们的企业软件是甲骨文的EnterpriseOne,他们的网络服务被称为“业务服务”,使用jDeveloper来创建它们,并与主要的企业资源规划系统接口,不确定这是否重要,但只是为了以防万一我想提到它。

代码语言:javascript
复制
RpcrouterSoapBinding_searchCandidate_ReqS inParam = new RpcrouterSoapBinding_searchCandidate_ReqS();

// Set in0
inParam.setIn0("String Data");

// Set in1
Map inputParamMap = new HashMap();
inputParamMap.put("HireDate", "2011-12-31");
inputParamMap.put("status", "Hired");
inParam.setIn1(inputParamMap);

// Begin service call
oracle.e1.bssv.J5706002.proxy.SearchResultArr searchReturn;
RpcrouterSoapBinding_searchCandidate_RespS outParam = new RpcrouterSoapBinding_searchCandidate_RespS();
try {
    searchReturn = myPort.searchCandidate(inParam.getIn0().toString(),inParam.getIn1);
    outParam.setSearchCandidateReturn(searchReturn);
} catch(Exception err){
    System.out.println("I got an error.");                
}

你以前见过这样的东西吗?看起来序列化程序忽略了WSDL。对于每个WSDL,<in1>应该有一个apachesoap:Map类型,但正如您在这里看到的,它以某种方式被设置为ans1:hashMap,但我不知道如何告诉它使用正确的类型?

以前有没有人见过这种行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-28 03:28:38

事实证明这是jDeveloper中的一个错误。甲骨文正在修复一个错误。很高兴知道我没疯。:D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4887841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档