2016-02-25 73 views
2

我有CXF soap web服務。CXF SOAP服務保留空間

@Component 
@WebService(endpointInterface = "com....MyWs", serviceName="MySrv") 
public class MyWsImpl implements MyWs { 
    @Override 
    public List<MyModel> get(String customer) { 
     List<MyModel> models = ...; 
     return models; 
    } 
} 

有一種基於myModel,可以是一個空間(" ")提起,但是解析器修剪的價值和它的序列化爲<mySpaceVal></mySpaceVal>欺騙我想<mySpaceVal> </mySpaceVal>

我怎麼能這樣做?

我嘗試添加

@XmlAttribute(name="space", namespace="xml") 
public final static String space = "preserve"; 

到基於myModel所以解析器可以添加XML:空間= 「保存」 屬性。 但它增加了一個命名空間ns3="xml",並顯示屬性作爲ns3:space="preserve"和要素使用jaxb適配器顯示爲空字符串,而不是" "

+0

你能而不是插入 ?有一個空間字符有一個可怕的設計,但如果這就是你堅持與你可能需要使用轉義序列。 – stdunbar

+0

@stdunbar感謝您的迴應,但它沒有奏效。該框架轉義字符串,我結束了' & nbsp;' –

+0

不幸的是,這並非意外。還有什麼你可以放在那裏?空間本身很難擁有。 「s-」或其他角色的「哨兵」價值如何? – stdunbar

回答

1

可以在<![CDATA[]]>部分包裝你的字符串值:

@XmlJavaTypeAdapter(CDATAXmlAdapter.class) 
public final static String space = "..."; 

private static class CDATAXmlAdapter extends XmlAdapter<String, String> { 
    @Override 
    public String marshal(final String value) throws Exception { 
     // you may want to apply additional value escaping to avoid 
     // CDATA nesting problem 
     return "<![CDATA[" + value + "]]>"; 
    } 

    @Override 
    public String unmarshal(final String value) throws Exception { 
     // If you expect that server will send CDATA as well 
     // then you need to strip CDATA from value 
     return value; 
    } 
} 
相關問題