2014-02-15 2 views
0

Используя SOAP-клиент, я могу получить корректную сортировку, но не отменять маркер в другом конце. Поэтому для этой цели я тестировал с помощью SOAP UI, вызывающего этот метод с аргументом «2013-05».аргумент метода JodaTime игнорируется с помощью JAXB в веб-методе

Точка останова в веб-методе findByYearMonth показывает текущее значение даты, и я также вижу, что базовый конструктор YearMonth вызывается связыванием JAXB (поэтому я получаю 2014-02).

//The class with the web method 
@Component 
@Qualifier("myFacade") 
@XmlJavaTypeAdapter(YearMonthAdapter.class) 
@Service 
public class myFacade implements IMyFacade { 

    /*the web method */ 
    findByYearMonth(YearMonth yearMonth) throws MyException { 
     // Break point here shows yearMonth = "2014-02" 
    } 
} 

адаптер:

/** 
* The YearMonth adapter. 
* 
* XmlAdapter for YearMonth 
*/ 
public class YearMonthAdapter extends XmlAdapter<String, YearMonth> { 

    @Override 
    public YearMonth unmarshal(String v) throws Exception { 
     return YearMonth.parse(v); 
    } 

    @Override 
    public String marshal(YearMonth v) throws Exception { 
     return v.toString(); 
    } 

} 

Если годМесяц находится внутри DTO, и я прохожу, что в качестве аргумента он правильно работает - до тех пор, как у меня есть файл package-info.java в правильном пути , Я пробовал много комбинаций и разных аннотаций, а также имел следующий файл package-info.java в том же пакете, что и класс, содержащий веб-метод, но мне не повезло, что веб-метод получил правильное значение.

//package-info.java 
@XmlJavaTypeAdapter(type = YearMonth.class, value = YearMonthAdapter.class) 
package uk.co.imperatives.billing.core.summary; 

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

import org.joda.time.YearMonth; 

import uk.co.imperatives.billing.api.util.YearMonthAdapter; 

ответ

1

Вы должны аннотировать параметр непосредственно, например, как показано ниже:

//The class with the web method 
@Component 
@Qualifier("myFacade") 
@Service 
public class MyFacade implements IMyFacade { 

    /* the web method */ 
    findByYearMonth(@XmlJavaTypeAdapter(type = YearMonth.class, value = YearMonthAdapter.class) YearMonth yearMonth) throws MyException { 
     // Break point should now show yearMonth = "2013-05" 
    } 
} 
Смежные вопросы