java - 如何从通用 JAXBElement<?延伸 >

标签 java web-services soap jaxb glassfish

我正在使用 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/

相关文章:

java - 如何在 XML 中使用 ESC ( ) 字符?

ASP.NET Web API 私有(private) Controller

java - 如何使用基于 JDK 11 的 Java 应用程序使用 Java Soap Web 服务

perl - 如何使用 Perl SOAP 在 JIRA 中获取自定义字段列表?

java - 如何使用 logback.xml 将 Apache Camel 日志级别设置为 ERROR

java - JToolbar不显示背景颜色

java - 带逗号的双值正则表达式

c# - 无法将类型 'System.Security.Cryptography.DSACryptoServiceProvider' 的对象强制转换为类型 'System.Security.Cryptography.RSA'

azure - 如何在 Microsoft Azure 中配置 Web 服务应用程序的预热

php - 设置 Zend Soap 客户端内容类型