[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] [MOXy] additional xpath support
|
Hi Polly,
There is actually already unmarshal support for these types of XPaths if
you use our DOMPlatform. I have attached an example, in this example
one of the mappings has the following XPath:
addressMapping.setXPath("//ns:customer/ns:phone-number/preceding-sibling::*[1]");
Note you will need the fix for bug #298114, this fix will be available
in the 2.0.1 and 2.1 nightly builds starting tomorrow (Dec 18).
https://bugs.eclipse.org/bugs/show_bug.cgi?id=298114
-Blaise
polly.c.chang wrote:
Hi,
I don't believe that MOXy currently supports these two features:
1. Support for preceding-sibling and following-sibling axis. This is
necessary so that we can check for a following-sibling of an ID with the
name VersionID.
2. Support for position() and false() functions.
Would it be possible to add these?
Thanks!
--Polly
/*******************************************************************************
* Copyright (c) 1998, 2009 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* bdoughan - December 17/2009 - 2.0.1 - Initial implementation
******************************************************************************/
package org.eclipse.persistence.testing.oxm.mappings.advancedxpath;
import org.eclipse.persistence.oxm.NamespaceResolver;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.oxm.XMLLogin;
import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
import org.eclipse.persistence.oxm.platform.DOMPlatform;
import org.eclipse.persistence.sessions.Project;
public class CustomerProject extends Project {
public CustomerProject() {
XMLLogin xmlLogin = new XMLLogin();
xmlLogin.setDatasourcePlatform(new DOMPlatform());
this.setDatasourceLogin(xmlLogin);
this.addDescriptor(getCustomerDescriptor());
this.addDescriptor(getAddressDescriptor());
}
private XMLDescriptor getCustomerDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Customer.class);
xmlDescriptor.setDefaultRootElement("ns:customer");
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns", "urn:example");
xmlDescriptor.setNamespaceResolver(nsResolver);
XMLCompositeObjectMapping addressMapping = new XMLCompositeObjectMapping();
addressMapping.setAttributeName("address");
addressMapping.setXPath("//ns:customer/ns:phone-number/preceding-sibling::*[1]");
addressMapping.setReferenceClass(Address.class);
xmlDescriptor.addMapping(addressMapping);
return xmlDescriptor;
}
private XMLDescriptor getAddressDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Address.class);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns", "urn:example");
xmlDescriptor.setNamespaceResolver(nsResolver);
XMLDirectMapping streetMapping = new XMLDirectMapping();
streetMapping.setAttributeName("street");
streetMapping.setXPath("text()");
xmlDescriptor.addMapping(streetMapping);
return xmlDescriptor;
}
}
/*******************************************************************************
* Copyright (c) 1998, 2009 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* bdoughan - December 17/2009 - 2.0.1 - Initial implementation
******************************************************************************/
package org.eclipse.persistence.testing.oxm.mappings.advancedxpath;
public class Address {
private String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public boolean equals(Object object) {
try {
if(null == object) {
return false;
}
Address testAddress = (Address) object;
if(null == street) {
return null == testAddress.getStreet();
} else {
return street.equals(testAddress.getStreet());
}
} catch(ClassCastException e) {
return false;
}
}
public String toString() {
String string = "Address(street=";
if(null == street) {
string += null;
} else {
string += "'" + street + "'";
}
return string += ")";
}
}
/*******************************************************************************
* Copyright (c) 1998, 2009 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* bdoughan - December 17/2009 - 2.0.1 - Initial implementation
******************************************************************************/
package org.eclipse.persistence.testing.oxm.mappings.advancedxpath;
public class Customer {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public boolean equals(Object object) {
try {
if(null == object) {
return false;
}
Customer testCustomer = (Customer) object;
if(null == address) {
return null == testCustomer.getAddress();
} else {
return address.equals(testCustomer.getAddress());
}
} catch(ClassCastException e) {
return false;
}
}
public String toString() {
String string = "Customer(address=";
if(null == address) {
string += null;
} else {
string += address.toString();
}
return string += ")";
}
}
<ns:customer xmlns:ns="urn:example">
<ns:address>Wrong Street</ns:address>
<ns:address>Right Street</ns:address>
<ns:phone-number/>
<ns:address>Wrong Street</ns:address>
</ns:customer>