当前位置: 首页 > 知识库问答 >
问题:

Axis2客户端缺少基元类型的xsi-type属性

卢健
2023-03-14

我正在尝试将我的客户端从axis1. x更新到axis2-1.6.2,而服务器端保持不变。Web服务由ZSI webservice平台在python上实现。客户端是使用WSDL2Java工具和XMLBeans数据库绑定使用旧的wsdl文件成功生成的。

在向旧的webservice发送请求时,我遇到了一个问题,新的axis2客户端创建了缺少xsi: type属性的请求,这是旧服务器所期望的,结果服务器返回任何无法解析无类型元素错误。

新的旧请求如下所示

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:getSearchResult xmlns:ns1="http://www.iphrase.com/2003/11/oneStep/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<arg xsi:type="xsd:string">
test
</arg>
</ns1:getSearchResult>
</soapenv:Body>
</soapenv:Envelope>

而新的是

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ones:getSearchResult xmlns:ones="http://www.iphrase.com/2003/11/oneStep/">
<arg>
test
</arg>
</ones:getSearchResult>
</soapenv:Body>
</soapenv:Envelope>

如您所见,“arg”参数缺少xsi:type=“xsd:string”,我认为这是主要问题。

这里有更多技术细节:

wsdl看起来像

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:types="http://www.iphrase.com/2003/11/oneStep/encodedTypes"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:tns="http://www.iphrase.com/2003/11/oneStep/"
  xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
  targetNamespace="http://www.iphrase.com/2003/11/oneStep/"
  xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
  <xsd:schema targetNamespace="http://www.iphrase.com/2003/11/oneStep/encodedTypes">
    <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
    <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />


<xsd:simpleType name="arg">
  <xsd:restriction base="xsd:string">
  </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="out">
  <xsd:restriction base="xsd:string">
  </xsd:restriction>
</xsd:simpleType>

 </xsd:schema>
</types>
<message name="getSearchResultSoapIn">
  <part name="arg" type="types:arg"/>
</message>
<message name="getSearchResultSoapOut">
  <part name="searchResult" type="types:out"/>
</message>

<portType name="QueryServiceSoap">
  <operation name="getSearchResult">
    <input message="tns:getSearchResultSoapIn"/>
    <output message="tns:getSearchResultSoapOut"/>
  </operation>
</portType>
<binding name="QueryServiceSoap" type="tns:QueryServiceSoap">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
  <operation name="getSearchResult">
    <soap:operation soapAction="http://www.iphrase.com/2003/11/oneStep/getSearchResult" style="rpc" />
    <input>
      <soap:body use="encoded" namespace="http://www.iphrase.com/2003/11/oneStep/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
    </input>
    <output>
      <soap:body use="encoded" namespace="http://www.iphrase.com/2003/11/oneStep/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
    </output>
  </operation>
</binding>


<service name="QueryService">
  <port name="QueryServiceSoap" binding="tns:QueryServiceSoap">
      <soap:address location="http://9.148.51.231:8777/service" />
  </port>
</service>
</definitions>

出于某种原因,axis2似乎省略了基本类型的xsi:type,我也没有找到xmlns:xsd=“http://www.w3.org/2001/XMLSchema“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance名称空间可能也是相关的。我假设使用Axis2客户端也不需要升级服务器。

有人能给出一个方向吗,看起来像是任何配置问题,但我对轴2的知识非常有限。所有试图在网络上找到任何相关内容的尝试都没有成功。

谢谢

共有1个答案

谭锐藻
2023-03-14

在您的WSDL中,查看绑定部分指定风格="文档"使用="编码"的位置?此WSDL正在指定文档/编码样式,这是非标准的并且非常不寻常。此页描述了四种样式(RPC vs文档,编码VS文字),您将看到作者没有在文档/编码上花费任何空间。

Axis2 不支持 rpc/编码,我的猜测是它也不包含支持文档/编码所需的位。最好的办法是向此服务器添加一个支持文档/文字的新接口。否则,您可能会卡住将安讯士用于客户端。这里有一个页面讨论从 JAX-WS 客户机调用 rpc/编码服务。您也许能够根据自己的需求进行调整。

 类似资料:
  • 问题内容: Axis2和Eclipse是否可以生成Web Service客户端,并使其使用包中已经具有的Java类型,而不是创建自己的类型。原因当然是如果我已经创建了类型A,并且它创建了它自己的类型AI,则不能仅将类型A的变量分配给类型B的变量。 wsdl是从部署到应用程序服务器的Web服务生成的。如果无法从中生成它,则可以从已经存在的Java文件中生成一个客户端。 问题答案: 如果您确实想重用现

  • 我正在使用JPA元模型生成http://relation.to/Bloggers/HibernateStaticMetamodelGeneratorAnnotationProcessor能够使用属性名称执行条件查询。 我正在通过ANT和hibernate-jpamodelgen-4.3.5生成元模型类。最终的http://mvnrepository.com/artifact/org.hiberna

  • 我试图从后端服务器检索数据,但我得到以下错误:类型'订阅'缺少类型'HomeData'中的以下属性:aSes、聚合器更改、公告、beacon公告和11个以上。 我正在使用以下服务 以及以下界面: 我在组件中调用getData(),如下所示: 我把所有这些都放在我的html模板中

  • 安装详细信息: 包:面向Web开发人员的Eclipse Java EE IDE。 版本:Luna发行版(4.4.0)

  • 我想知道我竞选活动的日常费用。我用这个留档https://developers.google.com/adwords/api/docs/guides/reporting 我也在使用php和Yii2。我有: 客户ID 客户端id 访问令牌 客户端密钥 刷新令牌 当我得到活动名称和id,这些客户客户ID,客户ID,client_secret就足够了,我得到活动没有任何问题,但当我试图得到一个报告,有错

  • 根据客户端与授权服务器安全地进行身份验证的能力(即维护客户端凭据机密性的能力),OAuth定义了两种客户端类型: 机密客户端 能够维持其凭据机密性(如客户端执行在具有对客户端凭据有限访问权限的安全的服务器上),或者能够使用 其他方式保证客户端身份验证的安全性。 公开客户端 不能够维持其凭据的机密性(如客户端执行在由资源所有者使用的设备上,例如已安装的本地应用程序或基于Web浏览器的应用),且不能通