2012-08-28 3 views
0

저는 Spring WS 및 JiBX를 처음 사용합니다. 나는 주석을 사용하지 않았다. Spring WS에서 Jibx를 사용하는 동안 다음과 같은 오류가 발생합니다.봄에 JiBX 비 정렬 화 예외가 발생했습니다.

JiBX unmarshalling exception: No unmarshaller for element "{http://www.visu.com/pos/soapws/}orderRequest" (line 1, col 103); nested exception is org.jibx.runtime.JiBXException: No unmarshaller for element "{http://www.visu.com/pos/soapws/}orderRequest" 

여기

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.visu.com/pos/soapws/" elementFormDefault="qualified" targetNamespace="http://www.visu.com/pos/soapws/"> 

    <xs:element type="tns:orderRequest" name="orderRequest"/> 
    <xs:complexType name="orderRequest"> 
    <xs:sequence> 
     <xs:element type="tns:order" name="order" minOccurs="1"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:element type="tns:order" name="order"/> 
    <xs:complexType name="order"> 
    <xs:sequence> 
     <xs:element name="customer" minOccurs="0"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element type="xs:string" name="firstName" minOccurs="0"/> 
      <xs:element type="xs:string" name="lastName" minOccurs="0"/> 
      <xs:element type="xs:string" name="middleName" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:attribute type="xs:long" use="required" name="customerNumber"/> 
     </xs:complexType> 
     </xs:element> 
     <xs:element type="tns:address" name="billTo" minOccurs="0"/> 
     <xs:element name="shipping" minOccurs="0"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:enumeration value="STANDARD_MAIL"/> 
      <xs:enumeration value="PRIORITY_MAIL"/> 
      <xs:enumeration value="INTERNATIONAL_MAIL"/> 
      <xs:enumeration value="DOMESTIC_EXPRESS"/> 
      <xs:enumeration value="INTERNATIONAL_EXPRESS"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element type="tns:address" name="shipTo" minOccurs="0"/> 
     <xs:element name="item" minOccurs="0" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element type="xs:string" name="id" minOccurs="0"/> 
      <xs:element type="xs:string" name="description" minOccurs="0"/> 
      </xs:sequence> 
      <xs:attribute type="xs:int" use="required" name="quantity"/> 
      <xs:attribute type="xs:float" use="required" name="price"/> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    <xs:attribute type="xs:long" use="required" name="orderNumber"/> 
    <xs:attribute type="xs:date" name="orderDate"/> 
    <xs:attribute type="xs:date" name="shipDate"/> 
    <xs:attribute type="xs:float" name="total"/> 
    </xs:complexType> 
    <xs:complexType name="address"> 
    <xs:sequence> 
     <xs:element type="xs:string" name="street1" minOccurs="0"/> 
     <xs:element type="xs:string" name="street2" minOccurs="0"/> 
     <xs:element type="xs:string" name="city" minOccurs="0"/> 
     <xs:element type="xs:string" name="state" minOccurs="0"/> 
     <xs:element type="xs:string" name="postCode" minOccurs="0"/> 
     <xs:element type="xs:string" name="country" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="orderResponse"> 
    <xs:sequence> 
     <xs:element type="xs:string" name="orderResponse" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:element type="tns:orderResponse" name="orderResponse"/> 
</xs:schema> 

가 검증 된 결합을 위해 사용되는 제 끝점 스프링 구성

public class OrderEndPoint extends AbstractMarshallingPayloadEndpoint{ 

private Marshaller marshaller; 
private Unmarshaller unmarshaller; 
private OrderService orderService; 

public OrderEndPoint(final OrderService orderService, final Marshaller marshaller, final Unmarshaller unmarshaller) { 
    super(marshaller); 
    super.setUnmarshaller(unmarshaller); 
    //this.marshaller = marshaller; 
    //this.unmarshaller = unmarshaller; 
    this.orderService = orderService;  
    System.out.println("This is Order End point constructor"); 
} 

@Override 
protected Object invokeInternal(final Object newOrder) throws Exception { 
    System.out.println("This is test for Invoke Internal"); 
    final OrderRequest orderReq = (OrderRequest)newOrder; 
    final Order order = orderReq.getOrder(); 
    this.orderService.placeOrder(order); 
    return "Order with the order number "+order.getOrderNumber()+" saved successfully"; 
} 

}

이하
<!-- Jibx marshellers --> 
<bean id="unmarshaller" class="org.springframework.oxm.jibx.JibxMarshaller"> 
    <property name="targetClass" value="com.visu.pos.soapws.model.OrderRequest"/> 
    <property name="bindingName" value="binding"/> 
</bean> 

<bean id="marshaller" class="org.springframework.oxm.jibx.JibxMarshaller"> 
    <property name="targetClass" value="com.visu.pos.soapws.model.OrderResponse"/> 
    <property name="bindingName" value="binding"/> 
</bean> 

가 Order.xsd이다 Jibx 구현 그물 별도로 Marshaller와 Unmarshaller가 필요하지 않습니다. 나는 마샬 러를 선언했지만이 오류를 던지고있다. 내가 사용할 수있는 모든 옵션을 시도했지만 아무 쓸모가. 이 점에 대해 도움을주십시오. 미리 감사드립니다 !! orderService에 대한 OrderEndPoint에서 세터와 게터를 만들 needed.Just하지 OrderEndPoint 콩 생성자 주입을 만드는 동안

답변

0
<bean id="orderEndPoint" class="OrderEndPoint"> 
    <property name="marshaller" ref="marshaller" /> 
    <property name="unmarshaller" ref="unmarshaller" /> 
    <property name="orderService" ref="orderService" /> 
</bean> 

속성을 설정하십시오.

참고 : OrderRequest는 마샬 러 여야합니다. (unmarshaller로 구성했습니다)

관련 문제