2011-09-14 3 views
5

Mam metodę WebService, która otrzymuje obiekt. Jednym z atrybutów jest "interwał", który jest liczbą całkowitą.CXF - Jak zadeklarować wymagany atrybut i nie-prymitywny?

Chciałbym, aby ta atrybucja była wymagana, ale bez podawania wartości domyślnej - chcę, aby użytkownik był zobowiązany do jawnego ustawienia wartości.

Jeśli użyję int interval - atrybut zostanie wyświetlony jako int i jeśli użytkownik nie ustawi jawnie tego atrybutu, zostanie wysłane zero (domyślna wartość Java dla pierwotnego typu int).

Jeśli użyję Integer interval - atrybut zostanie wyświetlony jako liczba całkowita i zostanie zadeklarowany jako opcjonalny w pliku WSDL, więc użytkownik nie może zobaczyć, że jest wymagany przed wysłaniem żądania.

Jeśli użyję Integer interval z @XmlElement(required = true) lub @XmlElement(nillable = false) - atrybut zostanie ujawniony jako int.

Atrybut może mieć dowolną liczbę całkowitą - ujemną, zero i dodatnią, więc nie mogę użyć wartości domyślnej, aby wskazać, że atrybut nie został jawnie ustawiony.

Mogę używać BigInteger interval z @XmlElement(required = true), ale brakuje nam zalet korzystania z typu rdzeniowego Integer.

Chciałbym wystawić atrybut jako Integer, więc otrzymam wartość null, jeśli użytkownik nie ustawił atrybutu, a jednocześnie chciałbym, aby WSDL ujawnił, że atrybut jest wymagany, aby użytkownicy wiedzieli, że jest wymagany po prostu patrząc na WSDL.

Odpowiedz

3

Z @XmlElement(required = true) WSDL była poprawna, ale problemem było to, że podczas korzystania z narzędzia org.apache.cxf.tools.wsdlto.WSDLToJava na mojej WSDL klient został wygenerowany z int interval zamiast Integer interval.

Rozwiązaniem jest przekazać „-b” opcji do narzędzia wsdl2java ze ścieżką do pliku powiązań JAXB że mapy xsd: int do java.lang.Integer:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:globalBindings> 
    <jaxb:javaType name="java.lang.Integer" 
        xmlType="xsd:int" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

Korzystanie @XmlElement(required = true) i „-b” opcja, zachował wymagany element (minOccurs = "1") i wyeksponował go jako liczbę całkowitą do klienta Java.

Więcej informacji: http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html