2011-01-04 8 views
3

Я написал пример весеннего webservice cleint. Это отлично работает с springws1.5, но при работе с spring ws 1.0.4 я становлюсь ниже исключения. Пожалуйста, помогите мне, почему мы получим это исключение и как его решить. Мне нужно использовать нижнюю версию только, так как моя весенняя версия 2.0.4. Пожалуйста, ответьте как можно скорее.JAXB unmarshalling exception: неожиданный элемент, когда spring webservice 1.0.4

Unhandled exception: 
    org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException: JAXB unmarshalling exception: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse> 
    Caused by: 
    javax.xml.bind.UnmarshalException: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse> 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:603) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:244) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:239) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1009) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:446) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:427) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:71) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137) 
    at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:240) 
    at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:123) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:314) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:297) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:107) 
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:395) 
    at org.springframework.ws.support.MarshallingUtils.unmarshal(MarshallingUtils.java:62) 
    at org.springframework.ws.client.core.WebServiceTemplate$2.extractData(WebServiceTemplate.java:276) 
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:417) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:265) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:253) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:245) 
    at encompass.mtm.webservices.Code1ServiceClient.getAddressCheckResponse(Code1ServiceClient.java:24) 

Я кодируюсь с помощью следующего примера http://justcompiled.blogspot.com/2010/11/web-service-client-with-spring-ws.html следующих изменений я сделал: Genereate классов с использованием wsconsume пакетного файла из JBoss бункера, я сохранивших банку

saaj1.3.jar, spring-ws-core-1.0.4.jar,spring-xml-1.0.4.jar 
spring-oxm-tiger-1.0.4.jar,spring-oxm-1.0.4.jar 

в jboss/../lib

Ниже приведена моя конфигурация в файл:

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"> 
     <property name="messageFactory"> 
      <bean class="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/> 
     </property> 
    </bean> 

    <bean id="test1ObjectFactory" class="test.webservices.ObjectFactory"/> 
    <bean id="test1ServiceMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
     <property name="contextPath" value="test.webservices" /> 
    </bean> 
    <bean id="test1ServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> 
     <constructor-arg ref="messageFactory" /> 
     <property name="marshaller" ref="test1ServiceMarshaller"></property> 
     <property name="unmarshaller" ref="test1ServiceMarshaller"></property> 
     <property name="messageSender"> 
      <bean 
       class="org.springframework.ws.transport.http.CommonsHttpMessageSender"> 
      </bean> 
     </property> 
     <property name="defaultUri" value="${webservice.url}" /> 
    </bean> 
    <bean id="test1ServiceClient" class="test.webservices.test1ServiceClient"> 
     <constructor-arg ref="test1ServiceTemplate"></constructor-arg> 
     <property name="test1ObjectFactory" ref="test1ObjectFactory"></property> 
    </bean> 

Теперь я заменил все и место webservice 1.5.0 jar. Stil, я столкнулся с этой проблемой, раньше это сработало. Я не сделал много chanegs. есть ли что-то в моем коде? Как chesk .. Как отслеживать это. Любая помощь высоко ценится. Мой ObjectFactory прост:

@XmlRegistry 
public class ObjectFactory { 

    /** 
    * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: test.webservices 
    * 
    */ 
    public ObjectFactory() { 
    } 

    /** 
    * Create an instance of {@link xxxResponse } 
    * 
    */ 
    public XxxResponse createxxxResponse() { 
     return new xxxResponse(); 
    } 

    /** 
    * Create an instance of {@link xxx } 
    * 
    */ 
    public Xxx createXXX() { 
     return new XXX(); 
    } 

}

ввода Ниже приведены classlevel аннотаций

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "xxxData" 
}) 
@XmlRootElement(name = "Xxx") 

Ответ:

@ XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "xxxResult" 
    }) 
    @XmlRootElement(name = "XxxResponse") 
+0

Пожалуйста, дайте мне ответ, когда мы получим эту ошибку. Где посмотреть? – vishnu

+0

Просьба предложить мне, как вести журнал и как разрешать эти ошибки? – vishnu

+0

Никто не отвечает ?? Нужна дополнительная информация, или этот вопрос не ясен. Пожалуйста, помогите мне, я действительно ищу этого. – vishnu

ответ

10

Хорошо, теперь у нас есть достаточно информации для диагностики :)

Исключение, которое вы получаете, говорит вам, что в контексте JAXB ожидается получение элементов без пространства имен XML. Он ожидает этого, потому что ваши аннотированные классы JAXB не имеют пространства имен, определенного где угодно. Вы ожидаете, что это объявлено как @XmlNamespace, где-то в связанных классах (или в package-info.java), но у вас этого нет.

Spring-WS, тем не менее, принимает ответы, что do имеют пространство имен (http://yyy.org в вашем примере), и поэтому unmarshalling терпит неудачу.

Что я могу объяснить, так это то, как это когда-либо работало с Spring-WS 1.5.x - несоответствие пространства имен должно быть неудачным для каждой версии.

Какой бы инструмент вы не использовали для создания классов JAXB должен создал файл package-info.java, который объявил пространство имен. Вы уверены, что там где-то нет?

+2

Спасибо, сэр. Это действительно мое плохое. Я не знал, что этот пакет -info.java очень важен. Я не сохранил этот файл, думая, что он содержит только имя пакета. Теперь я сохранил и все работало правильно. Просматривая google, я попытался сохранить пространство имен для файлов AddrCheck и AddrCheckResponse в XmlRootElement. Но в этот раз я получил нулевой результат. В любом случае, спасибо вам, сэр. Thatswhy я оставил еще один вопрос, чтобы понять, как работает этот маршаллер. В любом случае, спасибо вам, сэр. – vishnu

+0

У меня такая же проблема, но я никогда не удалял файл package-info.java и дважды проверял, действительно ли он там. Не могли бы вы дать мне несколько намеков? –