/** * Creates a {@link Message} backed by a JAXB bean. * * @param context The JAXBContext to be used for marshalling. * @param jaxbObject The JAXB object that represents the payload. must not be null. This object * must be bound to an element (which means it either is a {@link JAXBElement} or an * instanceof a class with {@link XmlRootElement}). * @param soapVersion The SOAP version of the message. Must not be null. */ public static Message create(JAXBRIContext context, Object jaxbObject, SOAPVersion soapVersion) { if (!context.hasSwaRef()) { return new JAXBMessage(context, jaxbObject, soapVersion); } // If we have swaRef, then that means we might have attachments. // to comply with the packet API, we need to eagerly turn the JAXB object into infoset // to correctly find out about attachments. try { MutableXMLStreamBuffer xsb = new MutableXMLStreamBuffer(); Marshaller m = context.createMarshaller(); AttachmentSetImpl attachments = new AttachmentSetImpl(); AttachmentMarshallerImpl am = new AttachmentMarshallerImpl(attachments); m.setAttachmentMarshaller(am); am.cleanup(); m.marshal(jaxbObject, xsb.createFromXMLStreamWriter()); // any way to reuse this XMLStreamBuffer in StreamMessage? return new StreamMessage(null, attachments, xsb.readAsXMLStreamReader(), soapVersion); } catch (JAXBException e) { throw new WebServiceException(e); } catch (XMLStreamException e) { throw new WebServiceException(e); } }
/* */ public static Message create( JAXBRIContext context, Object jaxbObject, SOAPVersion soapVersion, HeaderList headers, AttachmentSet attachments) /* */ { /* 93 */ if (!context.hasSwaRef()) { /* 94 */ return new JAXBMessage(context, jaxbObject, soapVersion, headers, attachments); /* */ } /* */ /* */ try /* */ { /* 102 */ MutableXMLStreamBuffer xsb = new MutableXMLStreamBuffer(); /* */ /* 104 */ Marshaller m = context.createMarshaller(); /* 105 */ AttachmentMarshallerImpl am = new AttachmentMarshallerImpl(attachments); /* 106 */ m.setAttachmentMarshaller(am); /* 107 */ am.cleanup(); /* 108 */ m.marshal(jaxbObject, xsb.createFromXMLStreamWriter()); /* */ /* 111 */ return new StreamMessage( headers, attachments, xsb.readAsXMLStreamReader(), soapVersion); /* */ } catch (JAXBException e) { /* 113 */ throw new WebServiceException(e); /* */ } catch (XMLStreamException e) { /* 115 */ throw new WebServiceException(e); /* */ } /* */ }
@NotNull public JAXBRIContext createJAXBContext( @NotNull SEIModel sei, @NotNull List<Class> classesToBind, @NotNull List<TypeReference> typeReferences) throws JAXBException { return JAXBRIContext.newInstance( classesToBind.toArray(new Class[classesToBind.size()]), typeReferences, null, sei.getTargetNamespace(), false, null); }