2015-01-04 4 views
1

В SoapUI я получил это исключениеjavax.xml.bind.UnmarshalException: неожиданный элемент, даже если @XmlRootElement добавлен

<faultstring>Unmarshalling Error: unexpected element (uri:"http://ws.soap.rd.pl", local:"User"). Expected elements are &lt;{}User></faultstring> 

Я действительно не знаю, WY У меня этот вопрос. Я попробовал поездку в Stack, но все же не могу найти ответ. @XmlRootElement добавлен, поэтому я действительно запутался.

запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.soap.rd.pl/" xmlns:ws1="http://ws.soap.rd.pl"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ws:updateUser> 
     <!--Optional:--> 
     <ws1:User> 
      <ID>?</ID> 
      <!--Optional:--> 
      <Imie>?</Imie> 
      <!--Optional:--> 
      <Nazwisko>?</Nazwisko> 
      <!--Optional:--> 
      <ws1:Adres> 
       <!--Optional:--> 
       <id>?</id> 
       <!--Optional:--> 
       <Ulica>?</Ulica> 
       <!--Optional:--> 
       <Miasto>?</Miasto> 
      </ws1:Adres> 
     </ws1:User> 
     </ws:updateUser> 
    </soapenv:Body> 
</soapenv:Envelope> 

мой DTO:

@XmlRootElement(name = "Adres", namespace = "http://ws.soap.rd.pl") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class AddressDto { 

    @XmlElement(name = "id", required = false) 
    public Long id; 

    @XmlElement(name = "Ulica", required = false) 
    public String street; 

    @XmlElement(name = "Miasto", required = false) 
    public String city; 

    @Override 
    public String toString() { 
     return "AddressDto [street=" + street + ", city=" + city + "]"; 
    } 

} 

и второй один:

@XmlRootElement(name = "User", namespace = "http://ws.soap.rd.pl") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class UserDto { 

    @XmlElement(name = "ID") 
    public long id; 

    @XmlElement(name = "Imie", required = false) 
    public String firstName; 

    @XmlElement(name = "Nazwisko", required = false) 
    public String lastName; 

    @XmlElement(name = "Adres", required = false) 
    public AddressDto addressDto; 

    @Override 
    public String toString() { 
     return "UserDto [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", addressDto=" + addressDto + "]"; 
    } 

} 

, если вам нужно мое определение WebService:

@WebService(endpointInterface = "userService", serviceName = "userService", name = "userServive") 
public interface UserService { 

    @WebMethod 
    public void updateUser(@WebParam(name = "User") UserDto user); 
} 
+0

Вы уже проверили свои пространства имен с URI? Кажется, у вас 2, один - http://ws.soap.rd.pl, а другой http://ws.soap.rd.pl/ – JamesB

+0

Как я должен его проверить? Вы имеете в виду, что UserDto для nad AddressDto должен иметь отдельные пространства имен? Даже если у меня есть такое же исключение. – user3350171

ответ

1

Попробуйте добавить targetNamespace в ваш @WebParam:

@WebMethod 
public void updateUser(
    @WebParam(name = "User", targetNamespace = "http://ws.soap.rd.pl") 
    UserDto user); 
+0

Я удалил пространства имен из каждого класса dto и добавил targetNamespace в userService interaface, и он работает. – user3350171

Смежные вопросы