JAXBElement.getValue() 返回 null

2024-04-04

我的 Pojo 类中有一对多映射。 一家店有一家分店,一个分店有很多家店铺 这是商店代码:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Shop")
public class Shop {

@XmlID
private String name;
@XmlIDREF
@XmlElement(name="ShopBranch",type=Branch.class)
private Branch branch;
//Getter Setter
}

以下是分行代码:

 @XmlAccessorType(XmlAccessType.FIELD)
public class Branch {
@XmlID
private String name;
private String address;
@XmlIDREF
@XmlElement(nillable=false,required=true)
private List<Shop> shops;
//Getter and Setters
}

我正在发布一个带有一些基本方法的网络服务。我的 wsimport 正在生成 Branch 类,如下所示

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "branch", propOrder = {
    "branchName",
    "address",
    "branchShop"
})
public class Branch {

    @XmlElement(name = "BranchName")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlID
    @XmlSchemaType(name = "ID")
    protected String branchName;
    protected String address;
    @XmlElementRef(name = "BranchShop", type = JAXBElement.class)
    protected List<JAXBElement<Object>> branchShop;
    //Getter-Setter
    }

我不知道为什么它是 List> 而不是 List>。但不管怎么说。我有一个返回所有分支的方法,并且工作正常。当我从分支的实例中提取branchShop时,我得到了branchShop列表的正确大小,但对于列表中的所有项目,getValue返回NULL。 下面是简短的代码:

PencilCatalog service= new PencilCatalog();
com.pencilhouse.webservices.PencilService port=service.getPencilCatalogPort();
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, Constant.PENCIL_SERVICE);
    List<Branch> branches= port.getAllBranches();
for(Branch b:branches)
{
    System.out.println("******************Branch:"+b.getBranchName()+" "+b.getAddress()+"******************");
    JAXBElement<Object>o=b.getBranchShop().get(0);
    System.out.println(o+"Value"+o.getScope()+" "+o.getValue());
}

o/p

******************分店:KukatPalli Steer 2 Kukatpalli******************** javax.xml.bind.JAXBElement@45d9d7beValueclass com.pencilhouse.webservices.Branch null

生成的 WSDL 相当大。我只发布分支机构和商店类型。我正在使用 Endpoint 发布 Web 服务

生成的 XML:

<xs:complexType name="shop">
<xs:sequence>
<xs:element name="name" type="xs:ID" minOccurs="0"/>
<xs:element name="ShopBranch" type="xs:IDREF" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="branch">
<xs:sequence>
<xs:element name="BranchName" type="xs:ID" minOccurs="0"/>
<xs:element name="address" type="xs:string" minOccurs="0"/>
<xs:element name="BranchShop" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

截获的信息: 要求:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getAllBranches xmlns:ns2="PencilServiceHouse"/>
</S:Body>
</S:Envelope>

回复:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:getAllBranchesResponse xmlns:ns2="PencilServiceHouse">
        <return>
            <name>
                    KukatPalli
            </name>
            <address>
                    Steer 2 Kukatpalli
            </address>
            <shops>
                    Pencil World    <!-- This is Shop Information which is coming as NULL in java, This is Shop's Name field which is declared as id using @XmlId -->
            </shops>
            <shops>
                    Pencils Den
            </shops>
            <shops>
                    Pencils Bag
            </shops>
        </return>
        <return>
            <name>
                    Salt Lake
            </name>
            <address>
                    Sec V Salt Lake
            </address>
            <shops>
                    Pencil World
            </shops>
            <shops>
                    Pencils Den
            </shops>
        </return>
        <return>
            <name>
                    Noida
            </name>
            <address>
                    Noida Sec 43
            </address>
            <shops>
                    Pencils Bag
            </shops>
        </return>
        </ns2:getAllBranchesResponse>
    </S:Body>
</S:Envelope>

@XmlIDREF提供了一种指定文档内引用的方法。要求每个对象都通过单独的嵌套关系来引用(例如@XmlElement) 将数据获取到 XML 文档中。

我写过更多关于@XmlIDREF在我的博客上:

  • http://blog.bdoughan.com/2010/10/jaxb-and-shared-references-xmlid-and.html http://blog.bdoughan.com/2010/10/jaxb-and-shared-references-xmlid-and.html

UPDATE

我看到了你的博客,我在 xml 响应中获取数据,但问题是 当我使用 wsimport 在客户端生成我的类时 为 @XmlIDRef 生成类型对象,但它不会为这些设置数据 正如我在问题中所解释的属性。

在您的示例中,您将要:类 -> 架构 -> 类。由于 Java 类和 XML 模式不是完美匹配,并且 JAXB 不会将任何 JAXB 特定元数据放入生成的模式中,因此一些信息会丢失。您可以按如下方式修复此问题:

您可以使用外部绑定文件来键入 IDREF 属性。

<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
    <jaxb:bindings node="xsd:complexType[@name='branch']//xsd:element[@name='BranchShop']">
        <jaxb:property>
            <jaxb:baseType name="org.example.Shop"/>
        </jaxb:property>
    </jaxb:bindings>
</jaxb:bindings>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXBElement.getValue() 返回 null 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • Python 如何获取某一特定点的导数值?

    from sympy import x Symbol x y x 2 dx diff y x 这段代码可以得到y的导数 这很容易dx 2 x 现在我想得到的值dx for x 2 清楚地 dx 2 2 4 when x 2 但是我如何用Py
  • 使用 gdi+ 将 png 转换为 gif (C#)

    我有一个 png 文件 必须将其转换为 gif 文件 里面有一个透明的部分 当我保存它时 透明的部分是黑色的而不是透明的 这是我的代码 FileStream imgStream new FileStream outputFile FileM
  • 关于Python中的关闭文件

    我知道如果在 Python 中不再使用的话 使用 close 来关闭文件是一个好习惯 我尝试打开大量打开的文件 并且不关闭它们 在同一个Python进程中 但没有看到任何异常或错误 Mac 和 Linux 我都试过了 那么 只是想知道Pyt
  • 如何根据当前用户的角色显示或隐藏 aspx 页面的内容

    我有一个 ASP NET 站点 其中每个页面都有一些内容 每个登录用户都有一些特定的角色 我想根据登录用户的角色隐藏和显示页面内容 我怎样才能做到这一点 P S 我了解 ASP NET 中整个表单的身份验证和授权 我的问题是关于页面的内容
  • 如何在Rcpp代码中返回R的NULL?

    假设我有一个 C 代码要使用 Rcpp 编译 并将在 R 中调用 Rcpp export SEXP to env List x if x hasAttribute names return x else return NULL 应该做什么N
  • 在 Android 中集成 Google Plus 时,SERVICE_VERSION_UPDATE_REQUIRED 和 Google Play 服务已过时

    我已经在 Android 应用程序中集成了 Google Plus 我使用的是 Android SDK 版本 4 2 2 但我在 google plus 上执行共享帖子时遇到此错误 Google Plus 服务已过时 and Connect
  • 检查 Python 列表中的项目是否为 int/number

    我有一个 Python 脚本 它读取 csv 文件并将每个值存储到列表列表中 list x y 我对此没有任何问题 list i 0 for row in reader list append list i append row 0 i 1
  • 为什么 std::search 需要前向迭代

    我的问题与下面的线程相同 我正在努力理解给出的答案 或者更确切地说 我的代码不应该工作 因为它只使用输入迭代器 但我的 func 似乎工作并且行为与 std search 相同 所以我不知所措 不愿意在没有正确理解的情况下继续前进 也许如果
  • Ruby 中 <

    我正在学习Ruby 在我使用的书中 有这样的示例代码 restaurant Restaurant new restaurant name Mediterrano restaurant description lt
  • 为什么我的 g++ 和 gcc 版本没有升级?

    我在 Mac 上 我将 OSx 更新到 Yosemite 我将 xcode 更新到版本 6 我下载了命令行工具 尽管如此 每当我输入 g version 时 我都会得到 g version couldn t understand kern
  • 调用 Activity 加载方法,Android [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在活动加载后立即调用一个方法 该方法是公共无效的 任何帮助 将不胜感激 您可以使用以下方法 您可以在活动启动时在其中任何一个方法之间调
  • aws s3 ls 给出错误 botocore.utils.BadIMDSRequestError:

    最近我按照aws官方网站的文档在Linux机器上安装了aws cli 第一次 我能够毫无问题地运行 s3 命 令 作为开发的一部分 我卸载了 aws cli 并重新安装了它 我收到错误 botocore utils BadIMDSReque
  • 在 IPython 中导入时的最佳实践

    我正在编写一个 py 文件 该文件将在第一个单元格中的一些 IPython 会话开始时定期导入 但也将从其他非交互式会话导入 因为它包含可以在非交互式环境中批量运行的函数 交互模式 它基本上是一个包含许多非常常见的类和函数的模块 因为我使用
  • Microsoft Reporting v.10 加载问题

    我正在尝试在我的 vs studio 网站中引用 microsoft reporting v 10 0 0 0 由于某种原因 它无法实现这一点 因为它总是给我一个编译错误 表明它无法加载类型 错误 2625 无法从程序集 Microsoft
  • 在 iPhone 应用程序中创建下拉列表

    当我单击带有箭头符号的按钮时 可用项目列表应显示为列表 谁能帮助我编写为 iPhone 应用程序开发此代码的代码 UIPickerView 是正确的控件 是 iOS 用户期望的控件 也是 Apple iOS 人机界面指南指定的控件 即使在
  • 具有伴生对象的类与同名的类和对象有什么区别?

    Scala 类的 伴生对象 可以被视为具有与该类相同的完全限定名称的单例对象 即相同的名称 在同一包中 它们用于保存类的所有实例共有的实用函数 作为 Java 的替代品static方法 然而 在文档和问题的不同地方 它说伴生对象必须在同一编
  • 如何检测同一键盘按键仅按下一次

    我正在设计一个键盘类 它只能检测一次键盘按键 但我仍然不知道如何做到这一点 我的目标是仅检查并在持续按下或保持按住同一键时仅执行一次操作 并且当同时按下 2 个操作键时不执行任何操作 例如 当我持续按住 A 键时 操作 1 只会执行一次 然
  • OpenCv错误无法通过视频采集打开相机

    我通过 opencv 使用相机 重新启动后突然运行我的代码 它显示以下错误 WARN 0 global io opencv modules videoio src cap v4l cpp 802 open VIDEOIO ERROR V4L
  • 将参考 SVG 图像嵌入 HTML 文件

    我有一个项目 我想将简单的图形背景放入表格单元格中 背景图像和一个小的 svg 文件效果很好 但我真的很想将源代码全部保存在一个文件中 也就是说 我希望能够在 HEAD 中定义图像 并在内联 STYLE css 中引用它 我已经尝试了 sv
  • JAXBElement.getValue() 返回 null

    我的 Pojo 类中有一对多映射 一家店有一家分店 一个分店有很多家店铺 这是商店代码 XmlAccessorType XmlAccessType FIELD XmlRootElement name Shop public class Sh