gpt4 book ai didi

java - 如何从通用 JAXBElement

转载 作者:行者123 更新时间:2023-11-30 11:46:21 29 4
gpt4 key购买 nike

我正在使用 NetBeans 和 Glassfish 从现有 WSDL 构建 Web 服务。NetBeans 已从给定的 WSDL 创建了所需的类。WSDL 定义了一些基本数据类型(例如 BaseType)和扩展它们的其他数据类型。 (例如 ExtType1、ExtType2 ...)WSDL 中描述的一些 SOAP 函数接受 BaseType 类型的参数,因此也可以使用扩展类型作为参数。

在用 PHP 编写的 Web 服务客户端中,我可以调用使用基本类型参​​数的方法:

$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value'
)
)
);

或者使用扩展类型参数

$response = $ws->__soapCall(
'myFunctionName',
array('theParameter' => array (
'BaseTypeField1' => 'some value',
'BaseTypeField2' => 'some other value',
'ExtTypeField1' => 'some value',
'ExtTypeField2' => 'some other value'
)
)
);

现在在 netbeans 生成的类中我有一个类型为 JAXBElement ,其中需要一个 BaseType 对象。

问题是:如何从 Java Web 方法调用中确定来自 Web 服务客户端的参数对象是 BaseType 还是他的扩展类型之一(以及其中的哪些)?我试图检索该对象的一些类数据信息,但它总是说它是一个 BaseType,所以我无法确定 ExtTypeField1 和 ExtTypeField2 是否可用。

谢谢

最佳答案

假设你有这样的东西 JAXBElement<? extends BaseType> object您可以按如下方式确定值的类型:

Class<? extends BaseType> klass = object.getValue().getClass();

现在您可以根据对象类型做一些事情,但这并不总是最好的方法。您可能想要的更多是这样的:

BaseType value = object.getValue();
if (value instanceof ExtType1) {
ExtType1 field1 = (ExtType1) value;
// we now know that it's an ExtType1
} else if (value instanceof ExtTypeField2) {
ExtType2 field2 = (ExtType2) value;
// we now know that it's an ExtType2
} // etc...

关于java - 如何从通用 JAXBElement<?延伸 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826995/

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