#135 Formatting and typo fix

This commit is contained in:
Gunnar Morling 2014-02-26 20:03:21 +01:00
parent b84a5df84e
commit 03dca9a8d4
14 changed files with 139 additions and 119 deletions

View File

@ -20,6 +20,7 @@ package org.mapstruct.ap.model.source.selector;
import java.util.ArrayList;
import java.util.List;
import org.mapstruct.ap.model.common.Parameter;
import org.mapstruct.ap.model.common.Type;
import org.mapstruct.ap.model.source.Method;
@ -37,18 +38,18 @@ public class InheritanceSelector implements MethodSelector {
*/
@Override
public <T extends Method> List<T> getMatchingMethods(
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
List<T> candidatesWithBestMatchingSourceType = new ArrayList<T>();
int bestMatchingSourceTypeDistance = Integer.MAX_VALUE;
// find the methods with the minimum distance regarding getParameter getParameter type
for (T method : methods ) {
for ( T method : methods ) {
Parameter singleSourceParam = method.getSourceParameters().iterator().next();
int sourceTypeDistance = parameterType.distanceTo( singleSourceParam.getType() );

View File

@ -20,12 +20,14 @@ package org.mapstruct.ap.model.source.selector;
import java.util.ArrayList;
import java.util.List;
import org.mapstruct.ap.model.common.Type;
import org.mapstruct.ap.model.source.Method;
import org.mapstruct.ap.model.source.SourceMethod;
/**
* This class provides the initial set of methods {@link MethodMatcher}
*
* @author Sjaak Derksen
*/
public class InitialSelector implements MethodSelector {
@ -35,12 +37,12 @@ public class InitialSelector implements MethodSelector {
*/
@Override
public <T extends Method> List<T> getMatchingMethods(
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
List<T> result = new ArrayList<T>();
for ( T method : methods ) {

View File

@ -19,12 +19,12 @@
package org.mapstruct.ap.model.source.selector;
import java.util.List;
import org.mapstruct.ap.model.common.Type;
import org.mapstruct.ap.model.source.Method;
import org.mapstruct.ap.model.source.SourceMethod;
/**
*
* @author Sjaak Derksen
*/
public interface MethodSelector {
@ -38,13 +38,14 @@ public interface MethodSelector {
* @param parameterType parameter type that should be matched
* @param returnType return type that should be matched
* @param targetPropertyName some information can be derived from the target property
*
* @return list of methods that passes the matching process
*/
<T extends Method> List<T> getMatchingMethods(
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
);
}

View File

@ -21,19 +21,19 @@ package org.mapstruct.ap.model.source.selector;
import java.util.ArrayList;
import java.util.List;
import javax.lang.model.util.Types;
import org.mapstruct.ap.model.common.Type;
import org.mapstruct.ap.model.source.Method;
import org.mapstruct.ap.model.source.SourceMethod;
/**
*
* @author Sjaak Derksen
*/
public class MethodSelectors implements MethodSelector {
private final List<MethodSelector> selectors = new ArrayList<MethodSelector>();
public MethodSelectors( Types typeUtils ) {
public MethodSelectors(Types typeUtils) {
selectors.add( new InitialSelector() );
selectors.add( new InheritanceSelector() );
@ -42,25 +42,25 @@ public class MethodSelectors implements MethodSelector {
@Override
public <T extends Method> List<T> getMatchingMethods(
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
List<T> candidates = new ArrayList<T>();
for (T method : methods) {
for ( T method : methods ) {
candidates.add( method );
}
for ( MethodSelector selector : selectors ) {
candidates = selector.getMatchingMethods(
mappingMethod,
candidates,
parameterType,
returnType,
targetPropertyName
mappingMethod,
candidates,
parameterType,
returnType,
targetPropertyName
);
}
return candidates;

View File

@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Types;
import org.mapstruct.ap.model.common.Type;
import org.mapstruct.ap.model.source.Method;
import org.mapstruct.ap.model.source.SourceMethod;
@ -42,7 +43,7 @@ public class XmlElementDeclSelector implements MethodSelector {
private final Types typeUtils;
public XmlElementDeclSelector( Types typeUtils ) {
public XmlElementDeclSelector(Types typeUtils) {
this.typeUtils = typeUtils;
}
@ -51,11 +52,11 @@ public class XmlElementDeclSelector implements MethodSelector {
*/
@Override
public <T extends Method> List<T> getMatchingMethods(
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
SourceMethod mappingMethod,
Iterable<T> methods,
Type parameterType,
Type returnType,
String targetPropertyName
) {
List<T> noXmlDeclMatch = new ArrayList<T>();
@ -67,20 +68,20 @@ public class XmlElementDeclSelector implements MethodSelector {
if ( candidate instanceof SourceMethod ) {
SourceMethod candiateMethod = (SourceMethod) candidate;
XmlElementDeclPrism xmlElememtDecl
= XmlElementDeclPrism.getInstanceOn( candiateMethod.getExecutable() );
= XmlElementDeclPrism.getInstanceOn( candiateMethod.getExecutable() );
if ( xmlElememtDecl != null ) {
String name = xmlElememtDecl.name();
TypeMirror scope = xmlElememtDecl.scope();
TypeMirror target = mappingMethod.getExecutable().getReturnType();
if ( ( scope != null ) && ( name != null ) ) {
// both scope and name should match when both defined
if ( name.equals( targetPropertyName ) && typeUtils.isSameType( scope, target ) ) {
if ( name.equals( targetPropertyName ) && typeUtils.isSameType( scope, target ) ) {
nameAndScopeMatch.add( candidate );
}
}
else if ( ( scope == null ) && ( name != null ) ) {
// name should match when defined
if ( name.equals( targetPropertyName ) ) {
if ( name.equals( targetPropertyName ) ) {
nameMatch.add( candidate );
}
}

View File

@ -26,7 +26,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@ -925,12 +924,12 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
String dateFormat) {
// first try to find a matching source method
SourceMethod matchingSourceMethod = getBestMatch(
method,
mappedElement,
methods,
sourceType,
targetType,
targetPropertyName
method,
mappedElement,
methods,
sourceType,
targetType,
targetPropertyName
);
if ( matchingSourceMethod != null ) {
@ -959,11 +958,12 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
String targetPropertyName) {
List<T> candidates = methodSelectors.getMatchingMethods(
mappingMethod,
methods,
parameterType,
returnType,
targetPropertyName );
mappingMethod,
methods,
parameterType,
returnType,
targetPropertyName
);
// print a warning if we find more than one method with minimum getParameter type distance
if ( candidates.size() > 1 ) {

View File

@ -19,56 +19,61 @@
package org.mapstruct.ap.test.jaxb.selection;
import org.mapstruct.ap.test.jaxb.selection.test1.OrderType;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
import org.mapstruct.ap.test.jaxb.selection.test2.ObjectFactory;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
import org.mapstruct.ap.testutil.IssueKey;
import org.mapstruct.ap.testutil.MapperTestBase;
import org.mapstruct.ap.testutil.WithClasses;
import org.testng.annotations.Test;
import static org.fest.assertions.Assertions.assertThat;
/**
* @author Sjaak Derksen
*/
@IssueKey("135")
@WithClasses({ org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.class, ObjectFactory.class,
@WithClasses({
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.class, ObjectFactory.class,
OrderDto.class, OrderShippingDetailsDto.class, OrderType.class, OrderShippingDetailsType.class,
SourceTargetMapper.class
})
public class JaxbFactoryMethodSelectionTest extends MapperTestBase {
@Test
public void shouldMatchOnNameAndOrScope() {
OrderType target = SourceTargetMapper.INSTANCE.targetToSource( createSource() );
OrderType target = SourceTargetMapper.INSTANCE.targetToSource( createSource() );
// qname and value should match for orderNumbers (distinct 1, 2)
assertThat( target.getOrderNumber1().getValue() ).isEqualTo( 15L );
assertThat( target.getOrderNumber1().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_ORDER_NUMBER1_QNAME );
assertThat( target.getOrderNumber2().getValue() ).isEqualTo( 31L );
assertThat( target.getOrderNumber2().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_ORDER_NUMBER2_QNAME );
// qname and value should match for orderNumbers (distinct 1, 2)
assertThat( target.getOrderNumber1().getValue() ).isEqualTo( 15L );
assertThat( target.getOrderNumber1().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_ORDER_NUMBER1_QNAME
);
assertThat( target.getOrderNumber2().getValue() ).isEqualTo( 31L );
assertThat( target.getOrderNumber2().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_ORDER_NUMBER2_QNAME
);
// qname should match for shipping details
assertThat( target.getShippingDetails().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_SHIPPING_DETAILS_QNAME );
// qname should match for shipping details
assertThat( target.getShippingDetails().getName() ).isEqualTo(
org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory.ORDER_TYPE_SHIPPING_DETAILS_QNAME
);
OrderShippingDetailsType shippingDetals = target.getShippingDetails().getValue();
OrderShippingDetailsType shippingDetails = target.getShippingDetails().getValue();
// qname and value should match (ObjectFactory = test2.ObjectFactory)
assertThat( shippingDetals.getOrderShippedFrom().getValue() ).isEqualTo( "from" );
assertThat( shippingDetals.getOrderShippedFrom().getName() ).isEqualTo(
ObjectFactory.ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_FROM_QNAME );
assertThat( shippingDetals.getOrderShippedTo().getValue() ).isEqualTo( "to" );
assertThat( shippingDetals.getOrderShippedTo().getName() ).isEqualTo(
ObjectFactory.ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_TO_QNAME );
// qname and value should match (ObjectFactory = test2.ObjectFactory)
assertThat( shippingDetails.getOrderShippedFrom().getValue() ).isEqualTo( "from" );
assertThat( shippingDetails.getOrderShippedFrom().getName() ).isEqualTo(
ObjectFactory.ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_FROM_QNAME
);
assertThat( shippingDetails.getOrderShippedTo().getValue() ).isEqualTo( "to" );
assertThat( shippingDetails.getOrderShippedTo().getName() ).isEqualTo(
ObjectFactory.ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_TO_QNAME
);
}
private OrderDto createSource() {
OrderDto order = new OrderDto();
order.setShippingDetails( new OrderShippingDetailsDto() );
order.setShippingDetails( new OrderShippingDetailsDto() );
order.setOrderNumber1( 15L );
order.setOrderNumber2( 31L );
order.getShippingDetails().setOrderShippedFrom( "from" );

View File

@ -19,7 +19,6 @@
package org.mapstruct.ap.test.jaxb.selection;
/**
*
* @author Sjaak Derksen
*/
public class OrderDto {
@ -32,7 +31,7 @@ public class OrderDto {
return orderNumber1;
}
public void setOrderNumber1( Long orderNumber1 ) {
public void setOrderNumber1(Long orderNumber1) {
this.orderNumber1 = orderNumber1;
}
@ -40,7 +39,7 @@ public class OrderDto {
return orderNumber2;
}
public void setOrderNumber2( Long orderNumber2 ) {
public void setOrderNumber2(Long orderNumber2) {
this.orderNumber2 = orderNumber2;
}
@ -48,7 +47,7 @@ public class OrderDto {
return shippingDetails;
}
public void setShippingDetails( OrderShippingDetailsDto shippingDetails ) {
public void setShippingDetails(OrderShippingDetailsDto shippingDetails) {
this.shippingDetails = shippingDetails;
}

View File

@ -19,7 +19,6 @@
package org.mapstruct.ap.test.jaxb.selection;
/**
*
* @author Sjaak Derksen
*/
public class OrderShippingDetailsDto {
@ -31,7 +30,7 @@ public class OrderShippingDetailsDto {
return orderShippedFrom;
}
public void setOrderShippedFrom( String orderShippedFrom ) {
public void setOrderShippedFrom(String orderShippedFrom) {
this.orderShippedFrom = orderShippedFrom;
}
@ -39,10 +38,9 @@ public class OrderShippingDetailsDto {
return orderShippedTo;
}
public void setOrderShippedTo( String orderShippedTo ) {
public void setOrderShippedTo(String orderShippedTo) {
this.orderShippedTo = orderShippedTo;
}
}

View File

@ -20,24 +20,27 @@
package org.mapstruct.ap.test.jaxb.selection;
import javax.xml.bind.JAXBElement;
import org.mapstruct.Mapper;
import org.mapstruct.ap.test.jaxb.selection.test1.ObjectFactory;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
import org.mapstruct.ap.test.jaxb.selection.test1.OrderType;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
import org.mapstruct.factory.Mappers;
/**
*
* @author Sjaak Derksen
*/
@Mapper(uses = { ObjectFactory.class,
org.mapstruct.ap.test.jaxb.selection.test2.ObjectFactory.class } )
public abstract class SourceTargetMapper {
@Mapper(uses = {
ObjectFactory.class,
org.mapstruct.ap.test.jaxb.selection.test2.ObjectFactory.class
})
public abstract class SourceTargetMapper {
public static final SourceTargetMapper INSTANCE = Mappers.getMapper( SourceTargetMapper.class );
// target 2 source methods
public abstract OrderType targetToSource(OrderDto target);
public abstract OrderShippingDetailsType dtoToOrderShippingDetailsType(OrderShippingDetailsDto target);
// TODO, remove this method when #134 is fixed

View File

@ -22,19 +22,20 @@ import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
@XmlRegistry
public class ObjectFactory {
public static final QName ORDER_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test1", "Order");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test1", "Order" );
public static final QName ORDER_TYPE_ORDER_NUMBER1_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test1", "orderNumber1");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test1", "orderNumber1" );
public static final QName ORDER_TYPE_ORDER_NUMBER2_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test1", "orderNumber2");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test1", "orderNumber2" );
public static final QName ORDER_TYPE_SHIPPING_DETAILS_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test1", "shippingDetails");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test1", "shippingDetails" );
public ObjectFactory() {
@ -46,26 +47,28 @@ public class ObjectFactory {
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1", name = "Order")
public JAXBElement<OrderType> createOrder(OrderType value) {
return new JAXBElement<OrderType>(ORDER_QNAME, OrderType.class, null, value);
return new JAXBElement<OrderType>( ORDER_QNAME, OrderType.class, null, value );
}
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
name = "orderNumber1", scope = OrderType.class)
name = "orderNumber1", scope = OrderType.class)
public JAXBElement<Long> createOrderTypeOrderNumber1(Long value) {
return new JAXBElement<Long>(ORDER_TYPE_ORDER_NUMBER1_QNAME, Long.class, OrderType.class, value);
return new JAXBElement<Long>( ORDER_TYPE_ORDER_NUMBER1_QNAME, Long.class, OrderType.class, value );
}
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
name = "orderNumber2", scope = OrderType.class)
name = "orderNumber2", scope = OrderType.class)
public JAXBElement<Long> createOrderTypeOrderNumber2(Long value) {
return new JAXBElement<Long>(ORDER_TYPE_ORDER_NUMBER2_QNAME, Long.class, OrderType.class, value);
return new JAXBElement<Long>( ORDER_TYPE_ORDER_NUMBER2_QNAME, Long.class, OrderType.class, value );
}
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
name = "shippingDetails", scope = OrderType.class)
name = "shippingDetails", scope = OrderType.class)
public JAXBElement<OrderShippingDetailsType> createOrderTypeShippingDetails(OrderShippingDetailsType value) {
return new JAXBElement<OrderShippingDetailsType>(ORDER_TYPE_SHIPPING_DETAILS_QNAME,
OrderShippingDetailsType.class, OrderType.class, value);
return new JAXBElement<OrderShippingDetailsType>(
ORDER_TYPE_SHIPPING_DETAILS_QNAME,
OrderShippingDetailsType.class, OrderType.class, value
);
}
}

View File

@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlType;
import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
@ -36,13 +37,13 @@ import org.mapstruct.ap.test.jaxb.selection.test2.OrderShippingDetailsType;
public class OrderType {
@XmlElementRef(name = "orderNumber1", namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
type = JAXBElement.class)
type = JAXBElement.class)
private JAXBElement<Long> orderNumber1;
@XmlElementRef(name = "orderNumber2", namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
type = JAXBElement.class)
type = JAXBElement.class)
private JAXBElement<Long> orderNumber2;
@XmlElementRef(name = "shippingDetails", namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test1",
type = JAXBElement.class)
type = JAXBElement.class)
private JAXBElement<OrderShippingDetailsType> shippingDetails;
public JAXBElement<Long> getOrderNumber1() {

View File

@ -27,11 +27,11 @@ import javax.xml.namespace.QName;
public class ObjectFactory {
public static final QName ORDER_SHIPPING_DETAILS_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test2", "OrderShippingDetails");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test2", "OrderShippingDetails" );
public static final QName ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_FROM_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test2", "orderShippedFrom");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test2", "orderShippedFrom" );
public static final QName ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_TO_QNAME =
new QName("http://www.mapstruct.org/ap/test/jaxb/selection/test2", "orderShippedTo");
new QName( "http://www.mapstruct.org/ap/test/jaxb/selection/test2", "orderShippedTo" );
public ObjectFactory() {
}
@ -43,22 +43,28 @@ public class ObjectFactory {
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", name = "OrderShippingDetails")
public JAXBElement<OrderShippingDetailsType> createOrderShippingDetails(OrderShippingDetailsType value) {
return new JAXBElement<OrderShippingDetailsType>(ORDER_SHIPPING_DETAILS_QNAME,
OrderShippingDetailsType.class, null, value);
return new JAXBElement<OrderShippingDetailsType>(
ORDER_SHIPPING_DETAILS_QNAME,
OrderShippingDetailsType.class, null, value
);
}
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", name = "orderShippedFrom",
scope = OrderShippingDetailsType.class)
scope = OrderShippingDetailsType.class)
public JAXBElement<String> createOrderShippingDetailsTypeOrderShippedFrom(String value) {
return new JAXBElement<String>(ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_FROM_QNAME, String.class,
OrderShippingDetailsType.class, value);
return new JAXBElement<String>(
ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_FROM_QNAME, String.class,
OrderShippingDetailsType.class, value
);
}
@XmlElementDecl(namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", name = "orderShippedTo",
scope = OrderShippingDetailsType.class)
scope = OrderShippingDetailsType.class)
public JAXBElement<String> createOrderShippingDetailsTypeOrderShippedTo(String value) {
return new JAXBElement<String>(ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_TO_QNAME, String.class,
OrderShippingDetailsType.class, value);
return new JAXBElement<String>(
ORDER_SHIPPING_DETAILS_TYPE_ORDER_SHIPPED_TO_QNAME, String.class,
OrderShippingDetailsType.class, value
);
}
}

View File

@ -34,10 +34,10 @@ import javax.xml.bind.annotation.XmlType;
public class OrderShippingDetailsType {
@XmlElementRef(name = "orderShippedFrom",
namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", type = JAXBElement.class)
namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", type = JAXBElement.class)
private JAXBElement<String> orderShippedFrom;
@XmlElementRef(name = "orderShippedTo",
namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", type = JAXBElement.class)
namespace = "http://www.mapstruct.org/ap/test/jaxb/selection/test2", type = JAXBElement.class)
private JAXBElement<String> orderShippedTo;
public JAXBElement<String> getOrderShippedFrom() {