【发布时间】:2018-03-12 18:49:02
【问题描述】:
我在 Java 8 上使用 Apache CXF 2.7.11 实现的一些 Java 优先 SOAP 服务存在问题。当 TRUE 作为值传递时,值结果为空。当以小写形式传递 true 时,同样可以正常工作。
我看到另一个线程,其中扩展 XmlAdapter<String, Boolean> 和 @XmlJavaTypeAdapter 的类已经解决了这个问题,但是生成的 WSDL 类型已从 xs:boolean 更改为 xs:string。这意味着布尔值应该由消费者作为字符串传递。在我的情况下这是不可接受的。
JAXB 类:
@XmlRootElement(name = "myPojo")
public class MyPojo {
@XmlElement(name = "myField")
private Boolean myBoolean;
@XmlJavaTypeAdapter(CustomBooleanAdapter.class)
public void setMyBoolean(Boolean bool) {
myBoolean = bool;
}
public Boolean getMyBoolean() {
return myBoolean;
}
}
生成的 WSDL 类型
<xs:complexType name="myPojo">
<xs:sequence>
<xs:element minOccurs="0" name="myField" type="xs:string"/>
</xs:sequence>
</xs:complexType>
现在,当我在服务上运行 WSDL2Java 时,生成的类 myField 将创建为 String 而不是 Boolean。
有没有办法在生成的 WSDL 中保持类型完整?
【问题讨论】:
-
如果 XML 元素被要求包含一个布尔值......为什么不简单地将其声明为一个 (
type="xs:boolean")?还是我误解了你的问题? -
@Seelenvirtuose OP 似乎从模型生成模式并获得
type="xs:string"。整个问题是关于如何生成type="xs:boolean"。 -
@lexicore OP 谈到
wsdl2java从 WSDL 生成模型。困惑?编辑:好的。最后一句谈到了生成的 WSDL。嗯... -
@Seelenvirtuose 似乎它实际上是第一个获取 WSDL 的 Java -> WSDL。这是用错误的类型生成的。 OP 稍后会担心它,当(可能是其他人)执行 WSDL -> Java 时,Java 中会出现错误的类型。
-
@lexicore - 是的,这就是问题所在。它是 Java 第一个 SOAP 服务,要求支持不区分大小写的布尔值。应用 XmlAdapter 会影响从 WSDL 生成的存根/客户端类。