<!--
    Copyright 2004 The Apache Software Foundation

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<binding>
	<mapping name="purchase-order" class="org.apache.xmlbeans.test.performance.jibx.binding.JibxPurchaseOrder">
		<namespace uri="http://openuri.org/easypo" default="elements"/>
		<structure name="customer" field="customer">
			<value name="name" field="name"/>
			<value name="address" field="address"/>
		</structure>
		<value name="date" field="date"/>
		<collection field="lineitems">
			<structure name="line-item" type="org.apache.xmlbeans.test.performance.jibx.binding.Lineitem">
				<value name="description" field="description"/>
				<value name="per-unit-ounces" field="perunitounces"/>
				<value name="price" field="price"/>
				<value name="quantity" field="quantity"/>
			</structure>
		</collection>
		<structure name="shipper" field="shipper">
			<value name="name" field="name"/>
			<value name="per-ounce-rate" field="perouncerate"/>
		</structure>
	</mapping>
</binding>
