2017-08-25 95 views
0

我們從客戶處獲取WSDL。 (即,我們不能改變它們。)jax ws double tostring更改格式

的類型之一的定義看起來是這樣的:

<complexType name="Type1"> 
    <complexContent> 
<restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
    <sequence> 
    <element name="value" minOccurs="0"> 
     <complexType> 
    <complexContent> 
     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
     <choice> 
      <element name="bigdecimal" type="{http://www.w3.org/2001/XMLSchema}double"/> 
      <element name="date" type="{http://www.w3.org/2001/XMLSchema}date"/> 
      <element name="string" type="{http://www.w3.org/2001/XMLSchema}string"/> 
     </choice> 
     </restriction> 
    </complexContent> 
     </complexType> 
    </element> 
    <element name="element2" type="{http://www.w3.org/2001/XMLSchema}integer" minOccurs="0"/> 
    </sequence> 
</restriction> 
    </complexContent> 
</complexType> 

造成之類的東西

public void setBigdecimal(Double value) { 
this.bigdecimal = value; 
} 

現在,當我們發送它會產生這樣的事情:

<rpcOp:value> 
    <rpcOp:bigdecimal>10.0</rpcOp:bigdecimal> <!-- IN SPITE OF THE NAME, THIS IS A DOUBLE VALUE! --> 
    <rpcOp:string>N</rpcOp:string> 
</rpcOp:value> 

客戶想要的內容t o被顯示爲不帶十進制數字,即10等

我懷疑當從Java對象生成請求xml時,JAX-WS框架只是簡單地調用Double.toString(),這將不可避免地添加一個小數點,十進制數字。

有沒有辦法改變這個而不能修改WSDL?爲這種類型註冊一些自定義數字格式化程序或類似的東西?

謝謝!

回答

0

在此期間,我找到了解決方案。它看起來是這樣的:(使用JAXB)

XJC-serializable.xml:

... 
<jaxb:globalBindings> 
<xjc:serializable /> 
<!-- ADDED THIS: --> 
<xjc:javaType name="java.lang.Double" xmlType="xs:double" 
adapter="util.MyDoubleAdapter" /> 
</jaxb:globalBindings> 
... 

那麼Java類:

public class MyDoubleAdapter extends XmlAdapter<String, Double> { 

@Override 
public String marshal(Double doubleValue) throws Exception { 
    if (doubleValue == null) { 
    return null; 
    } 
    String string = doubleValue.toString(); 
    if (string.endsWith(".0")) { 
    string = string.replaceAll("\\.0", ""); 
    } 
    return string; 
} 

public Double unmarshal(String stringValue) throws Exception { 
    if (stringValue == null) { 
    return null; 
    } 
    return Double.valueOf(stringValue); 
} 

} 

而且你去那裏。