Author: scheu
Date: Tue Mar 30 18:00:18 2010
New Revision: 929206

URL: http://svn.apache.org/viewvc?rev=929206&view=rev
Log:
AXIS2-4668
Contributor: Rich Scheuerle
Add precedence to the JAX-WS runtime's search for JAXBContext packages to avoid 
duplicate @XmlTypes
Added verification test to validate the code.

Added:
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntry.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntryResponse.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddressBookEntry.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByName.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByNameResponse.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/ObjectFactory.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/package-info.java
Modified:
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/AddressBookTests.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBook.java
    
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBookImpl.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/AnnotationDesc.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationDescImpl.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/utility/XMLRootElementUtil.java

Modified: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/AddressBookTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/AddressBookTests.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/AddressBookTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/AddressBookTests.java
 Tue Mar 30 18:00:18 2010
@@ -23,11 +23,11 @@ import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.apache.axis2.jaxws.TestLogger;
 import org.apache.axis2.jaxws.framework.AbstractTestCase;
-import org.apache.axis2.jaxws.sample.addressbook.AddEntry;
-import org.apache.axis2.jaxws.sample.addressbook.AddEntryResponse;
+import org.apache.axis2.jaxws.sample.addressbook.data.AddEntry;
+import org.apache.axis2.jaxws.sample.addressbook.data.AddEntryResponse;
 import org.apache.axis2.jaxws.sample.addressbook.AddressBook;
-import org.apache.axis2.jaxws.sample.addressbook.AddressBookEntry;
-import org.apache.axis2.jaxws.sample.addressbook.ObjectFactory;
+import org.apache.axis2.jaxws.sample.addressbook.data.AddressBookEntry;
+import org.apache.axis2.jaxws.sample.addressbook.data.ObjectFactory;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.namespace.QName;
@@ -63,7 +63,7 @@ public class AddressBookTests extends Ab
             TestLogger.logger.debug("----------------------------------");
             TestLogger.logger.debug("test: " + getName());
         
-        JAXBContext jbc = 
JAXBContext.newInstance("org.apache.axis2.jaxws.sample.addressbook");
+        JAXBContext jbc = 
JAXBContext.newInstance("org.apache.axis2.jaxws.sample.addressbook.data");
         
         // Create the JAX-WS client needed to send the request
         Service service = Service.create(QNAME_SERVICE);

Modified: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBook.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBook.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBook.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBook.java
 Tue Mar 30 18:00:18 2010
@@ -25,6 +25,7 @@ import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.xml.ws.RequestWrapper;
 import javax.xml.ws.ResponseWrapper;
+import org.apache.axis2.jaxws.sample.addressbook.data.AddressBookEntry;
 
 @WebService(name = "AddressBook", 
             targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
@@ -39,8 +40,8 @@ public interface AddressBook {
      */
     @WebMethod
     @WebResult(name = "status", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
-    @RequestWrapper(localName = "addEntry", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.AddEntry")
-    @ResponseWrapper(localName = "addEntryResponse", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.AddEntryResponse")
+    @RequestWrapper(localName = "addEntry", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.data.AddEntry")
+    @ResponseWrapper(localName = "addEntryResponse", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.data.AddEntryResponse")
     public boolean addEntry(
         @WebParam(name = "entry", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
         AddressBookEntry entry);
@@ -54,8 +55,8 @@ public interface AddressBook {
      */
     @WebMethod
     @WebResult(name = "entry", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
-    @RequestWrapper(localName = "findEntryByName", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.FindEntryByName")
-    @ResponseWrapper(localName = "findEntryByNameResponse", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.FindEntryByNameResponse")
+    @RequestWrapper(localName = "findEntryByName", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.data.FindEntryByName")
+    @ResponseWrapper(localName = "findEntryByNameResponse", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, className = 
"org.apache.axis2.jaxws.sample.addressbook.data.FindEntryByNameResponse")
     public AddressBookEntry findEntryByName(
         @WebParam(name = "firstname", targetNamespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
         String firstname,

Modified: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBookImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBookImpl.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBookImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/AddressBookImpl.java
 Tue Mar 30 18:00:18 2010
@@ -24,6 +24,8 @@ import org.apache.axis2.jaxws.TestLogger
 import javax.jws.WebService;
 import java.util.ArrayList;
 import java.util.Iterator;
+import org.apache.axis2.jaxws.sample.addressbook.data.AddressBookEntry;
+import org.apache.axis2.jaxws.sample.addressbook.data.ObjectFactory;
 
 @WebService(serviceName="AddressBookService",
                        
endpointInterface="org.apache.axis2.jaxws.sample.addressbook.AddressBook")

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntry.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntry.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntry.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntry.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for addEntry element declaration.
+ * 
+ * <p>The following schema fragment specifies the expected content contained 
within this class.
+ * 
+ * <pre>
+ * &lt;element name="addEntry">
+ *   &lt;complexType>
+ *     &lt;complexContent>
+ *       &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
+ *         &lt;sequence>
+ *           &lt;element name="entry" 
type="{http://org/apache/axis2/jaxws/sample/addressbook}AddressBookEntry"/>
+ *         &lt;/sequence>
+ *       &lt;/restriction>
+ *     &lt;/complexContent>
+ *   &lt;/complexType>
+ * &lt;/element>
+ * </pre>
+ * 
+ * 
+ */
+...@xmlaccessortype(XmlAccessType.FIELD)
+...@xmltype(name = "", propOrder = {
+    "entry"
+})
+...@xmlrootelement(name = "addEntry")
+public class AddEntry {
+
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true)
+    protected AddressBookEntry entry;
+
+    /**
+     * Gets the value of the entry property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link AddressBookEntry }
+     *     
+     */
+    public AddressBookEntry getEntry() {
+        return entry;
+    }
+
+    /**
+     * Sets the value of the entry property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link AddressBookEntry }
+     *     
+     */
+    public void setEntry(AddressBookEntry value) {
+        this.entry = value;
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntryResponse.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntryResponse.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntryResponse.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddEntryResponse.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for addEntryResponse element declaration.
+ * 
+ * <p>The following schema fragment specifies the expected content contained 
within this class.
+ * 
+ * <pre>
+ * &lt;element name="addEntryResponse">
+ *   &lt;complexType>
+ *     &lt;complexContent>
+ *       &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
+ *         &lt;sequence>
+ *           &lt;element name="status" 
type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ *         &lt;/sequence>
+ *       &lt;/restriction>
+ *     &lt;/complexContent>
+ *   &lt;/complexType>
+ * &lt;/element>
+ * </pre>
+ * 
+ * 
+ */
+...@xmlaccessortype(XmlAccessType.FIELD)
+...@xmltype(name = "", propOrder = {
+    "status"
+})
+...@xmlrootelement(name = "addEntryResponse")
+public class AddEntryResponse {
+
+    @XmlElement(namespace = "http://org/apache/axis2/jaxws/sample/addressbook";)
+    protected boolean status;
+
+    /**
+     * Gets the value of the status property.
+     * 
+     */
+    public boolean isStatus() {
+        return status;
+    }
+
+    /**
+     * Sets the value of the status property.
+     * 
+     */
+    public void setStatus(boolean value) {
+        this.status = value;
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddressBookEntry.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddressBookEntry.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddressBookEntry.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/AddressBookEntry.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for AddressBookEntry complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained 
within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="AddressBookEntry">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
+ *       &lt;sequence>
+ *         &lt;element name="firstName" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="lastName" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="phone" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="street" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="city" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="state" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+...@xmlaccessortype(XmlAccessType.FIELD)
+...@xmltype(name = "AddressBookEntry", propOrder = {
+    "firstName",
+    "lastName",
+    "phone",
+    "street",
+    "city",
+    "state"
+})
+public class AddressBookEntry {
+
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true)
+    protected String firstName;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true)
+    protected String lastName;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true, nillable = 
true)
+    protected String phone;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true, nillable = 
true)
+    protected String street;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true, nillable = 
true)
+    protected String city;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true, nillable = 
true)
+    protected String state;
+
+    /**
+     * Gets the value of the firstName property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getFirstName() {
+        return firstName;
+    }
+
+    /**
+     * Sets the value of the firstName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setFirstName(String value) {
+        this.firstName = value;
+    }
+
+    /**
+     * Gets the value of the lastName property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getLastName() {
+        return lastName;
+    }
+
+    /**
+     * Sets the value of the lastName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setLastName(String value) {
+        this.lastName = value;
+    }
+
+    /**
+     * Gets the value of the phone property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getPhone() {
+        return phone;
+    }
+
+    /**
+     * Sets the value of the phone property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setPhone(String value) {
+        this.phone = value;
+    }
+
+    /**
+     * Gets the value of the street property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getStreet() {
+        return street;
+    }
+
+    /**
+     * Sets the value of the street property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setStreet(String value) {
+        this.street = value;
+    }
+
+    /**
+     * Gets the value of the city property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getCity() {
+        return city;
+    }
+
+    /**
+     * Sets the value of the city property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setCity(String value) {
+        this.city = value;
+    }
+
+    /**
+     * Gets the value of the state property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getState() {
+        return state;
+    }
+
+    /**
+     * Sets the value of the state property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setState(String value) {
+        this.state = value;
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByName.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByName.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByName.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByName.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for findEntryByName element declaration.
+ * 
+ * <p>The following schema fragment specifies the expected content contained 
within this class.
+ * 
+ * <pre>
+ * &lt;element name="findEntryByName">
+ *   &lt;complexType>
+ *     &lt;complexContent>
+ *       &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
+ *         &lt;sequence>
+ *           &lt;element name="firstname" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="lastname" 
type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;/sequence>
+ *       &lt;/restriction>
+ *     &lt;/complexContent>
+ *   &lt;/complexType>
+ * &lt;/element>
+ * </pre>
+ * 
+ * 
+ */
+...@xmlaccessortype(XmlAccessType.FIELD)
+...@xmltype(name = "", propOrder = {
+    "firstname",
+    "lastname"
+})
+...@xmlrootelement(name = "findEntryByName")
+public class FindEntryByName {
+
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true, nillable = 
true)
+    protected String firstname;
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true)
+    protected String lastname;
+
+    /**
+     * Gets the value of the firstname property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getFirstname() {
+        return firstname;
+    }
+
+    /**
+     * Sets the value of the firstname property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setFirstname(String value) {
+        this.firstname = value;
+    }
+
+    /**
+     * Gets the value of the lastname property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link String }
+     *     
+     */
+    public String getLastname() {
+        return lastname;
+    }
+
+    /**
+     * Sets the value of the lastname property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link String }
+     *     
+     */
+    public void setLastname(String value) {
+        this.lastname = value;
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByNameResponse.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByNameResponse.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByNameResponse.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/FindEntryByNameResponse.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for findEntryByNameResponse element declaration.
+ * 
+ * <p>The following schema fragment specifies the expected content contained 
within this class.
+ * 
+ * <pre>
+ * &lt;element name="findEntryByNameResponse">
+ *   &lt;complexType>
+ *     &lt;complexContent>
+ *       &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
+ *         &lt;sequence>
+ *           &lt;element name="entry" 
type="{http://org/apache/axis2/jaxws/sample/addressbook}AddressBookEntry"/>
+ *         &lt;/sequence>
+ *       &lt;/restriction>
+ *     &lt;/complexContent>
+ *   &lt;/complexType>
+ * &lt;/element>
+ * </pre>
+ * 
+ * 
+ */
+...@xmlaccessortype(XmlAccessType.FIELD)
+...@xmltype(name = "", propOrder = {
+    "entry"
+})
+...@xmlrootelement(name = "findEntryByNameResponse")
+public class FindEntryByNameResponse {
+
+    @XmlElement(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";, required = true)
+    protected AddressBookEntry entry;
+
+    /**
+     * Gets the value of the entry property.
+     * 
+     * @return
+     *     possible object is
+     *     {...@link AddressBookEntry }
+     *     
+     */
+    public AddressBookEntry getEntry() {
+        return entry;
+    }
+
+    /**
+     * Sets the value of the entry property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {...@link AddressBookEntry }
+     *     
+     */
+    public void setEntry(AddressBookEntry value) {
+        this.entry = value;
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/ObjectFactory.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/ObjectFactory.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/ObjectFactory.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/ObjectFactory.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.axis2.jaxws.sample.addressbook.data;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the org.apache.axis2.jaxws.sample.addressbook package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+...@xmlregistry
+public class ObjectFactory {
+
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of 
schema derived classes for package: org.apache.axis2.jaxws.sample.addressbook
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {...@link FindEntryByName }
+     * 
+     */
+    public FindEntryByName createFindEntryByName() {
+        return new FindEntryByName();
+    }
+
+    /**
+     * Create an instance of {...@link AddEntry }
+     * 
+     */
+    public AddEntry createAddEntry() {
+        return new AddEntry();
+    }
+
+    /**
+     * Create an instance of {...@link AddressBookEntry }
+     * 
+     */
+    public AddressBookEntry createAddressBookEntry() {
+        return new AddressBookEntry();
+    }
+
+    /**
+     * Create an instance of {...@link AddEntryResponse }
+     * 
+     */
+    public AddEntryResponse createAddEntryResponse() {
+        return new AddEntryResponse();
+    }
+
+    /**
+     * Create an instance of {...@link FindEntryByNameResponse }
+     * 
+     */
+    public FindEntryByNameResponse createFindEntryByNameResponse() {
+        return new FindEntryByNameResponse();
+    }
+
+}

Added: 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/package-info.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/package-info.java?rev=929206&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/package-info.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/addressbook/data/package-info.java
 Tue Mar 30 18:00:18 2010
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+...@javax.xml.bind.annotation.xmlschema(namespace = 
"http://org/apache/axis2/jaxws/sample/addressbook";)
+package org.apache.axis2.jaxws.sample.addressbook.data;

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
 Tue Mar 30 18:00:18 2010
@@ -286,13 +286,18 @@ public class JAXBUtils {
 
                     TreeSet<String> validContextPackages = new 
TreeSet<String>(contextPackages); 
                     
+                    pruneDirectives(validContextPackages);
+                    
+                    int numPackages = validContextPackages.size();
+                    
                     ClassLoader tryCl = cl;
                     contextValue = 
createJAXBContextValue(validContextPackages, cl, forceArrays, properties);
 
                     // If we don't get all the classes, try the cached 
classloader 
-                    if (cacheKey != null && validContextPackages.size() != 
contextPackages.size()) {
+                    if (cacheKey != null && numPackages != 
validContextPackages.size()) {
                         tryCl = cacheKey;
                         validContextPackages = new 
TreeSet<String>(contextPackages);
+                        pruneDirectives(validContextPackages);
                         contextValue = 
createJAXBContextValue(validContextPackages, cacheKey, 
                                                               forceArrays, 
properties);
                     }
@@ -349,6 +354,74 @@ public class JAXBUtils {
         constructionType.value = contextValue.constructionType;
         return contextValue.jaxbContext;
     }
+    
+    /**
+     * The contextPackages may declare overrides.  
+     * Example:
+     *    "com.A"
+     *    "com.B"
+     *    "com.C"
+     *    "@com.A"   <-- Indicates a reference to a class (versus ns 2 pkg 
conversion)
+     *    "com.A > com.B"   <-- This says com.A overrides com.B
+     *    
+     * This method prunes the overrides and overriden packages.
+     * Example return:
+     *    "com.A"
+     *    "com.C"
+     * @param contextPackages
+     */
+    protected static void pruneDirectives(TreeSet<String> contextPackages) {
+        List<String> removePkgsList = new ArrayList<String>();
+        List<String> strongPkgsList = new ArrayList<String>();
+        
+        // Walk the contextPackages looking for entries representing directives
+        Iterator<String> it = contextPackages.iterator();
+        while (it.hasNext()) {
+            String entry = it.next();
+            // If the entry contains an override character
+            if (entry.contains(">")) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Override found:" + entry);
+                }
+                // Remove the entry using an iterator remove()
+                it.remove();  
+                
+                // Store the overridden package
+                String removePkg = entry.substring(entry.indexOf(">") + 1);
+                removePkg = removePkg.trim();
+                removePkgsList.add(removePkg);
+            }
+            if (entry.startsWith("@")) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Strong (class) reference found:" + entry);
+                }
+                // Remove the entry using an iterator remove()
+                it.remove();  
+                
+                // Store the overridden package
+                String strongPkg = entry.substring(1);
+                strongPkg = strongPkg.trim();
+                strongPkgsList.add(strongPkg);
+            }
+        }
+        
+        // Now walk the contextPackages and remove the overriden packages
+        it = contextPackages.iterator();
+        while (it.hasNext()) {
+            String entry = it.next();
+            // If the entry contains an override character
+            if (removePkgsList.contains(entry)) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Removing override package:" + entry);
+                }
+                // Remove the overridden package using an iterator remove()
+                it.remove();  
+            }
+        }
+        
+        // Now add back all of the strong packages
+        contextPackages.addAll(strongPkgsList);
+    }
 
     /**
      * Create a JAXBContext using the contextPackages

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/AnnotationDesc.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/AnnotationDesc.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/AnnotationDesc.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/AnnotationDesc.java
 Tue Mar 30 18:00:18 2010
@@ -35,4 +35,19 @@ public interface AnnotationDesc {
      * @return @XmlSeeAlso classes or null
      */
     public Class[] getXmlSeeAlsoClasses();
+    
+    /**
+     * @return true if the class has an @XmlType
+     */
+    public boolean hasXmlType();
+    
+    /**
+     * @return @XmlTypeName or (null if no @XmlType)
+     */
+    public String getXmlTypeName();
+    
+    /**
+     * @return @XmlType namepsace (null if no @XmlType)
+     */
+    public String getXmlTypeNamespace();
 }

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationDescImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationDescImpl.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationDescImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationDescImpl.java
 Tue Mar 30 18:00:18 2010
@@ -40,6 +40,9 @@ class AnnotationDescImpl implements Anno
     private String _XmlRootElementName = null;
     private String _XmlRootElementNamespace = null;
     private Class[] _XmlSeeAlsoClasses = null;
+    private boolean _hasXmlType = false;
+    private String _XmlTypeName = null;
+    private String _XmlTypeNamespace = null;
 
     private AnnotationDescImpl() {
         super();
@@ -56,6 +59,19 @@ class AnnotationDescImpl implements Anno
     public String getXmlRootElementNamespace() {
         return _XmlRootElementNamespace;
     }
+    
+    public boolean hasXmlType() {
+        return _hasXmlType;
+    }
+    
+    
+    public String getXmlTypeName() {
+        return _XmlTypeName;
+    }
+    
+    public String getXmlTypeNamespace() {
+        return _XmlTypeNamespace;
+    }
 
     static AnnotationDesc create(Class cls) {
         AnnotationDescImpl aDesc = new AnnotationDescImpl();
@@ -76,6 +92,13 @@ class AnnotationDescImpl implements Anno
             aDesc._XmlRootElementName = qName.getLocalPart();
             aDesc._XmlRootElementNamespace = qName.getNamespaceURI();
         }
+        
+        qName = XMLRootElementUtil.getXmlTypeQName(cls);
+        if (qName != null) {
+            aDesc._hasXmlType = true;
+            aDesc._XmlTypeName = qName.getLocalPart();
+            aDesc._XmlTypeNamespace = qName.getNamespaceURI();
+        }
         return aDesc;
     }
 
@@ -92,6 +115,15 @@ class AnnotationDescImpl implements Anno
             string.append(newline);
             string.append("      @XMLRootElement name      = " + 
this.getXmlRootElementName());
         }
+        
+        string.append(newline);
+        string.append("      @XmlType exists = " + this.hasXmlType());
+        if (this.hasXmlRootElement()) {
+            string.append(newline);
+            string.append("      @XmlType namespace = " + 
this.getXmlTypeNamespace());
+            string.append(newline);
+            string.append("      @XmlType name      = " + 
this.getXmlTypeName());
+        }
 
         if (this._XmlSeeAlsoClasses != null) {
             for (int i=0; i<_XmlSeeAlsoClasses.length; i++) {

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
 Tue Mar 30 18:00:18 2010
@@ -302,6 +302,7 @@ public class PackageSetBuilder {
         }
         if (requestWrapperPkg != null) {
             set.add(requestWrapperPkg);
+            set.add("@" + requestWrapperPkg);  // Indicates a package from an 
actual class reference (versus namespace)
         }
         String responseWrapperPkg = 
getPackageFromClassName(msrd.getResponseWrapperClassName(opDesc));
         if (log.isDebugEnabled()) {
@@ -309,6 +310,7 @@ public class PackageSetBuilder {
         }
         if (responseWrapperPkg != null) {
             set.add(responseWrapperPkg);
+            set.add("@" + responseWrapperPkg);  // Indicates a package from an 
actual class reference (versus namespace)
         }
       
         // The wrapper class and the element defining the wrapper may be 
@@ -350,6 +352,7 @@ public class PackageSetBuilder {
             }
             if (pkg != null) {
                 set.add(pkg);
+                set.add("@" + pkg);  // Indicates a package from an actual 
class reference (versus namespace)
             }
         }
     }
@@ -380,6 +383,7 @@ public class PackageSetBuilder {
                     }
                     if (pkg != null) {
                         set.add(pkg);
+                        set.add("@" + pkg);  // Indicates a package from an 
actual class reference (versus namespace)
                     }
                 }
             }
@@ -466,6 +470,32 @@ public class PackageSetBuilder {
 
             if (pkg != null) {
                 set.add(pkg);
+                set.add("@" + pkg);  // Indicates a package from an actual 
class reference (versus namespace)
+            }
+            // If there is an xmlType, and it maps to a package then add
+            // an override if the package is different.
+            if (pkg != null) {
+                AnnotationDesc ad = msrd.getAnnotationDesc(tClass);
+                if (ad != null && ad.hasXmlType()) {
+                    String ns = ad.getXmlTypeNamespace();
+                    if (ns != null && ns.length() > 0) {
+                        List pkgs = makePackages(ns);
+                        if (pkgs != null) {
+                            for (int i=0; i<pkgs.size(); i++) {
+                                String pkg2 = (String) pkgs.get(i);
+                                if (!pkg.equals(pkg2)) {
+                                    String override = pkg + " > " + pkg2;
+                                    if (!set.contains(override)) {
+                                        set.add(override);
+                                        if (log.isDebugEnabled()) {
+                                            log.debug("Adding override=" + 
override);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
             }
             addXmlSeeAlsoPackages(tClass, msrd, set);
         }
@@ -488,6 +518,31 @@ public class PackageSetBuilder {
                 String pkg = (elementPkg != null) ? elementPkg.getName() : 
null;
                 if (pkg != null) {
                     set.add(pkg);
+                    set.add("@" + pkg);  // Indicates a package from an actual 
class reference (versus namespace)
+                }
+                
+                if (pkg != null) {
+                    AnnotationDesc ad = msrd.getAnnotationDesc(tClass);
+                    if (ad != null && ad.hasXmlRootElement()) {
+                        String ns = ad.getXmlRootElementNamespace();
+                        if (ns != null && ns.length() > 0) {
+                            List pkgs = makePackages(ns);
+                            if (pkgs != null) {
+                                for (int i=0; i<pkgs.size(); i++) {
+                                    String pkg2 = (String) pkgs.get(i);
+                                    if (!pkg.equals(pkg2)) {
+                                        String override = pkg + " > " + pkg2;
+                                        if (!set.contains(override)) {
+                                            set.add(override);
+                                            if (log.isDebugEnabled()) {
+                                                log.debug("Adding override=" + 
override);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
                 }
                 addXmlSeeAlsoPackages(tClass, msrd, set);
             }
@@ -605,6 +660,7 @@ public class PackageSetBuilder {
                                        log.debug(" adding package = " + pkg);
                                }
                             set.add(pkg);
+                            set.add("@" + pkg);  // Indicates a package from 
an actual class reference (versus namespace)
                         }
                     }
                 }

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/utility/XMLRootElementUtil.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/utility/XMLRootElementUtil.java?rev=929206&r1=929205&r2=929206&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/utility/XMLRootElementUtil.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/utility/XMLRootElementUtil.java
 Tue Mar 30 18:00:18 2010
@@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlElem
 import javax.xml.bind.annotation.XmlEnumValue;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.namespace.QName;
 import java.beans.IntrospectionException;
@@ -110,7 +111,7 @@ public class XMLRootElementUtil {
     
     /**
      * @param clazz
-     * @return namespace of root element qname or null if this is not object 
does not represent a root element
+     * @return namespace of root element qname or null if this is object does 
not represent a root element
      */
     public static String getEnumValue(Enum myEnum){
                Field f;
@@ -134,6 +135,40 @@ public class XMLRootElementUtil {
                
                return value;
     }
+    
+    /**
+     * @param clazz
+     * @return namespace of @XmlType or null if this is object does not 
represent a root element
+     */
+    public static QName getXmlTypeQName(Class clazz) {
+
+        // See if the object has an @XmlType
+        XmlType t = (XmlType) getAnnotation(clazz,XmlType.class);
+        if (t == null) {
+            return null;
+        }
+
+        String name = t.name();
+        String namespace = t.namespace();
+
+        // The name may need to be defaulted
+        if (name == null || name.length() == 0 || name.equals("##default")) {
+            name = getSimpleName(clazz.getCanonicalName());
+        }
+
+        // The namespace may need to be defaulted
+        if (namespace == null || namespace.length() == 0 || 
namespace.equals("##default")) {
+            Package pkg = clazz.getPackage();
+            XmlSchema schema = (XmlSchema) getAnnotation(pkg,XmlSchema.class);
+            if (schema != null) {
+                namespace = schema.namespace();
+            } else {
+                namespace = "";
+            }
+        }
+
+        return new QName(namespace, name);
+    }
 
     /**
      * utility method to get the last token in a "."-delimited 
package+classname string


Reply via email to