Example usage for javax.xml.bind JAXBElement JAXBElement

List of usage examples for javax.xml.bind JAXBElement JAXBElement

Introduction

In this page you can find the example usage for javax.xml.bind JAXBElement JAXBElement.

Prototype

public JAXBElement(QName name, Class<T> declaredType, T value) 

Source Link

Document

Construct an xml element instance.

Usage

From source file:ddf.security.realm.sts.StsRealm.java

/**
 * Creates a binary security token based on the provided credential.
 *//*from   w ww . j av  a 2 s . c  o m*/
private String getBinarySecurityToken(String credential) {
    BinarySecurityTokenType binarySecurityTokenType = new BinarySecurityTokenType();
    binarySecurityTokenType.setValueType("#CAS");
    binarySecurityTokenType.setEncodingType(WSConstants.SOAPMESSAGE_NS + "#Base64Binary");
    binarySecurityTokenType.setId("CAS");
    binarySecurityTokenType.setValue(Base64.encode(credential.getBytes()));
    JAXBElement<BinarySecurityTokenType> binarySecurityTokenElement = new JAXBElement<BinarySecurityTokenType>(
            new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
                    "BinarySecurityToken"),
            BinarySecurityTokenType.class, binarySecurityTokenType);
    Writer writer = new StringWriter();
    JAXB.marshal(binarySecurityTokenElement, writer);

    String binarySecurityToken = writer.toString();

    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("Binary Security Token: " + binarySecurityToken);
    }

    return binarySecurityToken;
}

From source file:fr.fastconnect.factory.tibco.bw.maven.packaging.ApplicationManagement.java

/**
 * /application/services/adapter//w w  w  .  j  av  a 2s  . com
 */
private Adapter getAdapter(String name) {
    List<Adapter> services = getAdapterServices();

    if (services != null) {
        for (Adapter service : services) {
            if (service.getName().equals(name)) {
                return service;
            }
        }
    }

    Adapter result = new Adapter();
    result.setName(name);
    services.add(result);

    QName qName = new QName(APPLICATION_MANAGEMENT_NAMESPACE, "adapter");
    JAXBElement<Adapter> j = new JAXBElement<Adapter>(qName, Adapter.class, result);
    application.getServices().getBaseService().add(j);

    return result;
}

From source file:gov.va.ds4p.ds4pmobileportal.pep.XACMLPolicyEnforcement.java

private String dumpResponseToString(ResultType resp) {
    String res = "";
    JAXBElement<ResultType> element = new JAXBElement<ResultType>(
            new QName("urn:oasis:names:tc:xacml:2.0:context:schema:os", "Result"), ResultType.class, resp);
    try {/*w  w  w  .  ja va 2  s .  c  o  m*/
        JAXBContext context = JAXBContext.newInstance(ResultType.class);
        Marshaller marshaller = context.createMarshaller();
        StringWriter sw = new StringWriter();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        //marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        marshaller.marshal(element, sw);
        res = sw.toString();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return res;
}

From source file:org.castor.jaxb.CastorMarshallerTest.java

/**
 * Creates the {@link JAXBElement} from passed object.
 *
 * @param obj the object to use/* w w w  .j  a  v a  2s  .  co  m*/
 *
 * @return the {@link JAXBElement} that wrapps the passed entity
 */
private JAXBElement createJAXBElement(Object obj) {

    return new JAXBElement(new QName(""), obj.getClass(), obj);
}

From source file:com.evolveum.midpoint.prism.util.JaxbTestUtil.java

public static String marshalWrap(Object jaxbObject) throws JAXBException {
    JAXBElement<Object> jaxbElement = new JAXBElement<Object>(DEFAULT_ELEMENT_NAME,
            (Class) jaxbObject.getClass(), jaxbObject);
    return getInstance().marshalElementToString(jaxbElement);
}

From source file:com.evolveum.liferay.usercreatehook.ws.ModelPortWrapper.java

@SuppressWarnings("unchecked")
private static <T> JAXBElement<T> toJaxbElement(QName name, T value) {
    return new JAXBElement<T>(name, (Class<T>) value.getClass(), value);
}

From source file:com.virtualparadigm.packman.processor.JPackageManager.java

private static void marshallToFile(Collection<Package> packages, String filePath) {
    try {/*w  w  w .  java2  s  .c  o m*/
        Marshaller marshaller = jaxbContext.createMarshaller();

        // removes the xml header:
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        StringWriter stringWriter = new StringWriter();
        for (Package installedPackage : packages) {
            marshaller.marshal(
                    new JAXBElement<Package>(new QName(null, "package"), Package.class, installedPackage),
                    stringWriter);

            stringWriter.append("\n");
        }

        FileUtils.writeStringToFile(new File(filePath), stringWriter.toString(), "UTF-8");
    } catch (Exception e) {
        logger.error("", e);
    }
}

From source file:com.evolveum.midpoint.prism.marshaller.BeanUnmarshaller.java

/**
 * Parses either a map entry, or a fictitious heterogeneous list property.
 *
 * It makes sure that a 'key' property is inserted into 'bean' object, being sourced from 'node' structure.
 * Node itself can be single-valued or multi-valued, corresponding to single or multi-valued 'key' property.
 * ---// w  w w  . ja  v  a2s . co m
 * A notable (and quite ugly) exception is processing of fictitious heterogeneous lists.
 * In this case we have a ListXNode that should be interpreted as a MapXNode, inserting fictitious property
 * named after abstract multivalued property in the parent bean.
 *
 * For example, when we have (embedded in ExecuteScriptType):
 *   {
 *     pipeline: *[
 *       { element: search, ... },
 *       { element: sequence, ... }
 *     ]
 *   }
 *
 * ...it should be, in fact, read as if it would be:
 *
 *   {
 *     pipeline: {
 *        scriptingExpression: [
 *          { type: SearchExpressionType, ... },
 *          { type: ExpressionSequenceType, ... }
 *        ]
 *     }
 *   }
 *
 * (The only difference is in element names, which are missing in the latter snippet, but let's ignore that here.)
 *
 * Fictitious heterogeneous list entry here is "scriptingExpression", a property of pipeline (ExpressionPipelineType).
 *
  * We have to create the following data structure (corresponding to latter snippet):
 *
 * instance of ExecuteScriptType:
 *   scriptingExpression = instance of JAXBElement(pipeline, ExpressionPipelineType):         [1]
 *     scriptingExpression = List of                                             [2]
 *       - JAXBElement(search, SearchExpressionType)
 *       - JAXBElement(sequence, ExpressionSequenceType)
 *
 * We in fact invoke this method twice with the same node (a two-entry list, marked as '*' in the first snippet):
 * 1) bean=ExecuteScriptType, key=pipeline, node=HList(*), isHeteroListProperty=false
 * 2) bean=ExpressionPipelineType, key=scriptingExpression, node=HList(*), isHeteroListProperty=true      <<<
 *
 * During the first call we fill in scriptingExpression (single value) in ExecuteScriptType [1]; during the second one
 * we fill in scriptingExpression (multivalued) in ExpressionPipelineType [2].
 *
 * Now let's expand the sample.
 *
 * This XNode tree:
 *   {
 *     pipeline: *[
 *       { element: search, type: RoleType, searchFilter: {...}, action: log },
 *       { element: sequence, value: **[
 *           { element: action, type: delete },
 *           { element: action, type: assign, parameter: {...} },
 *           { element: search, type: UserType }
 *       ] }
 *     ]
 *   }
 *
 * Should be interpreted as:
 *   {
 *     pipeline: {
 *       scriptingExpression: [
 *          { type: SearchExpressionType, type: RoleType, searchFilter: {...}, action: log }
 *          { type: ExpressionSequenceType, scriptingExpression: [
 *                { type: ActionExpressionType, type: delete },
 *                { type: ActionExpressionType, type: assign, parameter: {...} },
 *                { type: SearchExpressionType, type: UserType }
 *            ] }
 *       ]
 *     }
 *   }
 *
 * Producing the following data:
 *
 * instance of ExecuteScriptType:
 *   scriptingExpression = instance of JAXBElement(pipeline, ExpressionPipelineType):         [1]
 *     scriptingExpression = List of                                             [2]
 *       - JAXBElement(search, instance of SearchExpressionType):
 *           type: RoleType,
 *           searchFilter: (...),
 *           action: log,
 *       - JAXBElement(sequence, instance of ExpressionSequenceType):
 *           scriptingExpression = List of
 *             - JAXBElement(action, instance of ActionExpressionType):
 *                 type: delete
 *             - JAXBElement(action, instance of ActionExpressionType):
 *                 type: assign
 *                 parameter: (...),
 *             - JAXBElement(search, instance of SearchExpressionType):
 *                 type: UserType
 *
 * Invocations of this method will be:
 *  1) bean=ExecuteScriptType, key=pipeline, node=HList(*), isHeteroListProperty=false
 *  2) bean=ExpressionPipelineType, key=scriptingExpression, node=HList(*), isHeteroListProperty=true            <<<
 *  3) bean=SearchExpressionType, key=type, node='type: c:RoleType', isHeteroListProperty=false
 *  4) bean=SearchExpressionType, key=searchFilter, node=XNode(map:1 entries), isHeteroListProperty=false
 *  5) bean=SearchExpressionType, key=action, node=XNode(map:1 entries), isHeteroListProperty=false
 *  6) bean=ActionExpressionType, key=type, node='type: log', isHeteroListProperty=false
 *  7) bean=ExpressionSequenceType, key=scriptingExpression, node=HList(**), isHeteroListProperty=true           <<<
 *  8) bean=ActionExpressionType, key=type, node='type: delete', isHeteroListProperty=false
 *  9) bean=ActionExpressionType, key=type, node='type: assign', isHeteroListProperty=false
 * 10) bean=ActionExpressionType, key=parameter, node=XNode(map:2 entries), isHeteroListProperty=false
 * 11) bean=ActionParameterValueType, key=name, node='name: role', isHeteroListProperty=false
 * 12) bean=ActionParameterValueType, key=value, node='value: rome555c-7797-11e2-94a6-001e8c717e5b', isHeteroListProperty=false
 * 13) bean=SearchExpressionType, key=type, node='type: UserType', isHeteroListProperty=false
 *
 * Here we have 2 calls with isHeteroListProperty=true; first for pipeline.scriptingExpression, second for
 * sequence.scriptingExpression.
 */
private <T> void unmarshalEntry(@NotNull T bean, @NotNull Class<T> beanClass, @NotNull QName key,
        @NotNull XNode node, @NotNull XNode containingNode, boolean isHeteroListProperty,
        @NotNull ParsingContext pc) throws SchemaException {

    //System.out.println("bean=" + bean.getClass().getSimpleName() + ", key=" + key.getLocalPart() + ", node=" + node + ", isHeteroListProperty=" + isHeteroListProperty);
    final String propName = key.getLocalPart();

    // this code is just to keep this method reasonably short
    PropertyAccessMechanism mechanism = new PropertyAccessMechanism();
    if (!mechanism.compute(bean, beanClass, propName, key, node, pc)) {
        return;
    }

    final String actualPropertyName = mechanism.actualPropertyName;
    final boolean storeAsRawType = mechanism.storeAsRawType;

    final Method getter = mechanism.getter;
    final Method setter = mechanism.setter;
    final boolean wrapInJaxbElement = mechanism.wrapInJaxbElement;

    if (Element.class.isAssignableFrom(mechanism.paramType)) {
        throw new IllegalArgumentException(
                "DOM not supported in field " + actualPropertyName + " in " + beanClass);
    }

    // The type T that is expected by the bean, i.e. either by
    //   - setMethod(T value), or
    //   - Collection<T> getMethod()
    // We use it to retrieve the correct value when parsing the node.
    // We might specialize it using the information derived from the node (to deal with inclusive polymorphism,
    // i.e. storing ExclusionPolicyConstraintType where AbstractPolicyConstraintType is expected).
    @NotNull
    Class<?> paramType;

    if (!storeAsRawType && !isHeteroListProperty) {
        Class<?> t = specializeParamType(node, mechanism.paramType, pc);
        if (t == null) { // indicates a problem
            return;
        } else {
            paramType = t;
        }
    } else {
        paramType = mechanism.paramType;
    }

    if (!(node instanceof ListXNode) && Object.class.equals(paramType) && !storeAsRawType) {
        throw new IllegalArgumentException("Object property (without @Raw) not supported in field "
                + actualPropertyName + " in " + beanClass);
    }

    //      String paramNamespace = inspector.determineNamespace(paramType);

    boolean problem = false;
    Object propValue = null;
    Collection<Object> propValues = null;
    // For heterogeneous lists we have to create multi-valued fictitious property first. So we have to treat node as a map
    // (instead of list) and process it as a single value. Only when
    if (node instanceof ListXNode && (!node.isHeterogeneousList() || isHeteroListProperty)) {
        ListXNode xlist = (ListXNode) node;
        if (setter != null) {
            try {
                Object value = unmarshalSinglePropValue(node, actualPropertyName, paramType, storeAsRawType,
                        beanClass, pc);
                if (wrapInJaxbElement) {
                    propValue = wrapInJaxbElement(value, mechanism.objectFactory,
                            mechanism.elementFactoryMethod, propName, beanClass, pc);
                } else {
                    propValue = value;
                }
            } catch (SchemaException e) {
                problem = processSchemaException(e, node, pc);
            }
        } else {
            // No setter, we have to use collection getter
            propValues = new ArrayList<>(xlist.size());
            for (XNode xsubsubnode : xlist) {
                try {
                    Object valueToAdd;
                    Object value = unmarshalSinglePropValue(xsubsubnode, actualPropertyName, paramType,
                            storeAsRawType, beanClass, pc);
                    if (value != null) {
                        if (isHeteroListProperty) {
                            QName elementName = xsubsubnode.getElementName();
                            if (elementName == null) {
                                // TODO better error handling
                                throw new SchemaException(
                                        "Heterogeneous list with a no-elementName node: " + xsubsubnode);
                            }
                            Class valueClass = value.getClass();
                            QName jaxbElementName;
                            if (QNameUtil.hasNamespace(elementName)) {
                                jaxbElementName = elementName;
                            } else {
                                // Approximate solution: find element in schema registry - check for type compatibility
                                // in order to exclude accidental name matches (like c:expression/s:expression).
                                Optional<ItemDefinition> itemDefOpt = getSchemaRegistry()
                                        .findItemDefinitionsByElementName(elementName).stream()
                                        .filter(def -> getSchemaRegistry()
                                                .findTypeDefinitionsByType(def.getTypeName()).stream()
                                                .anyMatch(typeDef -> typeDef.getCompileTimeClass() != null
                                                        && typeDef.getCompileTimeClass()
                                                                .isAssignableFrom(valueClass)))
                                        .findFirst();
                                if (itemDefOpt.isPresent()) {
                                    jaxbElementName = itemDefOpt.get().getName();
                                } else {
                                    LOGGER.warn("Heterogeneous list member with unknown element name '"
                                            + elementName + "': " + value);
                                    jaxbElementName = elementName; // unqualified
                                }
                            }
                            @SuppressWarnings("unchecked")
                            JAXBElement jaxbElement = new JAXBElement<>(jaxbElementName, valueClass, value);
                            valueToAdd = jaxbElement;
                        } else {
                            if (wrapInJaxbElement) {
                                valueToAdd = wrapInJaxbElement(value, mechanism.objectFactory,
                                        mechanism.elementFactoryMethod, propName, beanClass, pc);
                            } else {
                                valueToAdd = value;
                            }
                        }
                        propValues.add(valueToAdd);
                    }
                } catch (SchemaException e) {
                    problem = processSchemaException(e, xsubsubnode, pc);
                }
            }
        }
    } else {
        try {
            propValue = unmarshalSinglePropValue(node, actualPropertyName, paramType, storeAsRawType, beanClass,
                    pc);
            if (wrapInJaxbElement) {
                propValue = wrapInJaxbElement(propValue, mechanism.objectFactory,
                        mechanism.elementFactoryMethod, propName, beanClass, pc);
            }
        } catch (SchemaException e) {
            problem = processSchemaException(e, node, pc);
        }
    }

    if (setter != null) {
        try {
            setter.invoke(bean, propValue);
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            throw new SystemException(
                    "Cannot invoke setter " + setter + " on bean of type " + beanClass + ": " + e.getMessage(),
                    e);
        }
    } else if (getter != null) {
        Object getterReturn;
        Collection<Object> col;
        try {
            getterReturn = getter.invoke(bean);
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            throw new SystemException(
                    "Cannot invoke getter " + getter + " on bean of type " + beanClass + ": " + e.getMessage(),
                    e);
        }
        try {
            col = (Collection<Object>) getterReturn;
        } catch (ClassCastException e) {
            throw new SystemException("Getter " + getter + " on bean of type " + beanClass + " returned "
                    + getterReturn + " instead of collection");
        }
        if (propValue != null) {
            col.add(propValue);
        } else if (propValues != null) {
            for (Object propVal : propValues) {
                col.add(propVal);
            }
        } else if (!problem) {
            throw new IllegalStateException("Strange. Multival property " + propName + " in " + beanClass
                    + " produced null values list, parsed from " + containingNode);
        }
        if (!isHeteroListProperty) {
            checkJaxbElementConsistence(col, pc);
        }
    } else {
        throw new IllegalStateException("Uh? No setter nor getter.");
    }
}

From source file:com.aurel.track.exchange.docx.exporter.AssembleWordprocessingMLPackage.java

public static JAXBElement getWrappedFldChar(FldChar fldchar) {

    return new JAXBElement(new QName(Namespaces.NS_WORD12, "fldChar"), FldChar.class, fldchar);

}

From source file:com.flexoodb.common.FlexUtils.java

/**
* extracts the plain XML equivalent of the passed object.
*
* @param  obj the object containing the elements that will be used to populate the XML.
* @return XML string./*from  w w w .jav a  2s. c o m*/
* @see Hashtable
 *@see Element
*/
static public String getSimpleXML(Object obj) throws Exception {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    JAXBContext context = JAXBContext.newInstance(((FlexContainer) obj).getObject().getClass());
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    m.marshal(new JAXBElement(new QName("", ((FlexContainer) obj).getObject().getClass().getSimpleName()),
            ((FlexContainer) obj).getObject().getClass(), ((FlexContainer) obj).getObject()), bos);
    return new String(bos.toByteArray());
}