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

soap请求数据丢失,[value: null]而不是真实值

南门刚捷
2023-03-14

我使用以下方法创建了web服务:

findOrders(Set<Filter>)

过滤器在XSD模式中定义如下:

<xs:complexType name="filter">
<xs:sequence>
<xs:element name="propertyName" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="type" type="tns:filterType" minOccurs="0"></xs:element>
<xs:element name="value" type="xs:anyType" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

对象筛选器看起来像这样:

class Filter implements Serializable {

private String propertyName;
private FilterType type;
private Object value;

/*getters setters*/
}

我发出请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:kul="myKul">
   <soapenv:Header/>
   <soapenv:Body>
      <kul:findOrders>
         <filters>
            <propertyName>submitter.username</propertyName>
            <type>Equals</type>
            <value>someValue</value>
         </filters>
      </kul:findOrders>
   </soapenv:Body>
</soapenv:Envelope>

但是,当在我的应用程序中读取请求时,我看到属性值包含“[value:null]”,而不是“someValue”。属性类型和属性名称都可以。

共有1个答案

端木望
2023-03-14

这是因为someValue是“xs:anyType”,在java中表示为对象。

AnyType是一种既可以表示simpleType也可以表示complexType的类型,您对它没有任何限制
例如,你可以在它下面有一个树形结构

<value>
    <sometag>
        <sometag2>
        blabla
        </sometag2>
    </sometag>
</value>

由于Jaxb(我希望您使用jaxws-Jaxb)不知道您将在值中拥有的对象的类型,因此它将创建一种更通用的方式来表示它,从而将字段值的内容表示为DOM对象。

实际上,它正确地反序列化了您的“someValue”,但并没有将其表示为字符串,而是表示为DOM结构。如果您在应用程序中放置断点并尝试进入值字段,您将看到所有内容都在那里。但可以肯定的是,DOM表示法使用起来不太方便。

问题是,如果您只是想在其中放入一些字符串,为什么要使用xs: anyType?

您可以做的一件事是在xml文件中专门定义一个字符串,如下所示:

<value xsi:type="xs:string">someValue</value>

这样,在这种情况下,它被明确定义为您有一个字符串,Jaxb将能够映射到正确的字符串类型

 类似资料:
  • 我的SOAP请求有问题。当我尝试向服务器发出下面的肥皂请求时,它会返回预期的结果。 位置: 输入: 输出: 它返回此连接的令牌。 但是当我尝试处理下面的请求时,它返回整个wsdl文件,而不是成功/失败响应。 地点:http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl 输入: 输出: 预期输出: 有人能提出实际问题是

  • 问题内容: 我正在编辑搜索表单,并尝试防止数据库中的特殊字符。在JSP搜索表单中,(多重选择)下拉列表允许用户选择将在查询中使用的描述(注意:description是字符串列表): 提交表单时,页面会动态生成URL,该URL在URL中使用查询参数(丑陋,我知道,双手被绑住了)。这是描述段的摘要。 我在数据库中有一个测试条目,其描述是: AAA`〜!@#$%^&*()_ +-= {} | [] \:

  • 问题内容: 如PHP文档中所述,当使用包含长整数的数据结构时,它们将被转换为浮点数。解决方法是使用,而是将其保留为字符串。当荷兰国际集团这样的值,将编码这些数字背到大的整数: 使用此方法进行正确的数据往返很容易出错。如果属性包含,则数字字符串应保留为字符串,它将被编码为整数。 我想从服务器获取一个对象,修改一个属性,然后将整个数据结构放回去。我需要保留原始类型。除了要处理的属性外,我不想保留其他属

  • 问题内容: 我正在使用SQL数据库,我有一列名为“价格”。创建数据库后,将“价格”列设置为“我”,需要将其类型更改为不丢失数据库中的数据。这应该通过SQL脚本来完成 我想到了创建一个新列,将数据移到其中,删除旧列,然后重命名新创建的列。 有人可以帮我举个例子吗?在SQL中也有一个函数可以将字符串解析为十进制? 谢谢 问题答案: 您无需添加新列两次,只需在更新新列后删除旧列即可: 请注意,如果不是数

  • 在我们的应用程序中,用户多年来一直在使用以下代码上传数百万张图像: 最近,我们看到需要保存上传图像的数据。问题在于,压缩位图时图像Exif数据丢失。我考虑使用从原始文件中提取此数据: ..然后将其添加到InputStream 中,然后继续上传文件。问题是< code>ExifInterface无法将Exif数据保存到InputStream。 当Exif数据上传到服务器时,如何将它们保留在图像中?

  • 问题内容: 如果使用方法,则每次通过此方法写入文件时,都会丢失旧数据。是否可以通过写入文件而不会丢失旧数据? 问题答案: 使用采用和的构造函数 并将布尔值设置为。这样,你写入的数据将被附加到文件的末尾,而不是覆盖已经存在的数据。