gpt4 book ai didi

java - 请求 POJO AXIS2 Web 服务的参数未传递给 POJO

转载 作者:行者123 更新时间:2023-11-30 11:56:05 25 4
gpt4 key购买 nike

我们在 Apache2 网络服务器后面的 Tomcat 6 中运行的 AXIS2 v1.5.2 中实现了一个 POJO 网络服务。

出于演示目的,我将重点介绍 validateUser 消息和相应的方法。所有消息都以类似的方式运行。

我看过this以及其他一些相关问题,但它们似乎没有深入到问题的根源。

当向服务发送请求时,参数将作为 null 和空白传递给 POJA。

首先是 WSDL:

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://service.icomet.com" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax21="http://util.java/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://service.icomet.com">
<wsdl:types>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://util.java/xsd">
<xs:complexType name="Map">
<xs:sequence>
<xs:element minOccurs="0" name="empty" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema xmlns:ax22="http://util.java/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.icomet.com">
<xs:import namespace="http://util.java/xsd"/>
<xs:element name="validateUser">
<xs:complexType>
<xs:sequence>
<xs:element name="user" nillable="true" type="xs:string"/>
<xs:element name="userPassword" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="validateUserRequest">
<wsdl:part name="parameters" element="ns:validateUser"/>
</wsdl:message>

遵循 org.apache.axis2.rpc.receivers.RPCMessageReceiver、org.apache.axis2.rpc.receivers.RPCUtil 和 org.apache.axis2.databinding.utils.BeanUtil 的代码我看到的是服务收到我的请求时参数完好无损。日志中打印的 OMElement 来自:

BeanUtil.deserialize(OMElement 响应, 对象[] java类型, ObjectSupplier objectSupplier) 看起来像这样: 反序列化(OMElement 响应, 对象[] java类型, ObjectSupplier objectSupplier)

看起来像这样:

<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns:validateUser xmlns:ns="http://service.icomet.com">
<ns:user>test</ns:user>
<ns:userPassword>values</ns:userPassword>
</ns:validateUser>

在调用 OMElement 的子元素并查看上述 OMElement 的第一个子元素后,我看到了:

<ns:validateUser xmlns:ns="http://service.icomet.com">
<ns:user>test</ns:user>
<ns:userPassword>values</ns:userPassword>
</ns:validateUser>

在上述 OMElement 上调用 getText() 会在日志中返回多个空行。

我添加了以下方法:

    private static void showElement(OMElement omElement) {
System.out.println("onElement class:" + omElement.getClass().getName());
System.out.println("omElement:" + omElement);
System.out.println("omElement.getText:" + omElement.getText());
for (Iterator it = omElement.getChildElements(); it.hasNext();) {
Object object = it.next();
System.out.println("child class name:" + object.getClass().getName());
System.out.println("child to string:" + object);

}

for (Iterator it = omElement.getAllAttributes(); it.hasNext();) {
OMAttribute object = (OMAttribute) it.next();
System.out.println("OMAttribute:" + object.getAttributeValue());
}
}

到 BeanUtil 类以更好地查看此 OMElement。此代码返回以下内容:

onElement class:org.apache.axiom.om.impl.llom.OMElementImpl
omElement:<ns:validateUser xmlns:ns="http://service.icomet.com">
<ns:user>test</ns:user>
<ns:userPassword>values</ns:userPassword>
</ns:validateUser

omElement.getText:

child class name:org.apache.axiom.om.impl.llom.OMElementImpl
child to string:<ns:user xmlns:ns="http://service.icomet.com">test</ns:user>
child class name:org.apache.axiom.om.impl.llom.OMElementImpl
child to string:<ns:userPassword xmlns:ns="http://service.icomet.com">values</ns:userPassword>

所以,我看到了值(value)。可以这么说,他们正在到达并进门。但是,由于 org.apache.axis2.databinding.typemapping.SimpleTypeMapper.getSimpleTypeObject 在 OMElement 上调用 getText 并返回一个空字符串,因此 RPCUtil.processRequest 方法返回一个包含空字符串和空对象的对象数组,并且这会传递给 POJO。

我知道这是一个很长的问题,但我想我最好先添加所有这些信息。

最佳答案

事实证明这是 AXIS2 1.5 中的错误。

一些细节待查here

缺陷已在 2011 年 1 月 6 日的夜间构建中得到解决。仍在等待确认究竟做了什么来解决这个问题。线程中讨论了几个解决方案。

我暂时使用了最明显的答案并自己修补了代码。

关于java - 请求 POJO AXIS2 Web 服务的参数未传递给 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com