/**
* 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.
*/
package org.apache.ws.jaxme.examples.misc.address.impl;

public class AddressImpl extends org.apache.ws.jaxme.examples.misc.address.impl.AddressTypeImpl implements org.apache.ws.jaxme.examples.misc.address.Address , org.apache.ws.jaxme.JMElement {
  private final static javax.xml.namespace.QName __qName = new javax.xml.namespace.QName("http://ws.apache.org/jaxme/examples/misc/address", "Address");


  public javax.xml.namespace.QName getQName() {
    return __qName;
  }

}
