24 */
25
26 package com.sun.xml.internal.ws.encoding;
27
28 import com.sun.istack.internal.NotNull;
29 import com.sun.xml.internal.bind.DatatypeConverterImpl;
30 import com.sun.xml.internal.ws.api.SOAPVersion;
31 import com.sun.xml.internal.ws.api.WSFeatureList;
32 import com.sun.xml.internal.ws.api.message.Attachment;
33 import com.sun.xml.internal.ws.api.message.AttachmentSet;
34 import com.sun.xml.internal.ws.api.message.Packet;
35 import com.sun.xml.internal.ws.api.pipe.ContentType;
36 import com.sun.xml.internal.ws.api.pipe.StreamSOAPCodec;
37 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
38 import com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory;
39 import com.sun.xml.internal.ws.developer.SerializationFeature;
40 import com.sun.xml.internal.ws.developer.StreamingDataHandler;
41 import com.sun.xml.internal.ws.message.MimeAttachmentSet;
42 import com.sun.xml.internal.ws.streaming.XMLStreamWriterUtil;
43 import com.sun.xml.internal.ws.util.ByteArrayDataSource;
44 import com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter;
45 import com.sun.xml.internal.ws.util.xml.XMLStreamWriterFilter;
46 import com.sun.xml.internal.ws.streaming.MtomStreamWriter;
47 import com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil;
48 import com.sun.xml.internal.ws.server.UnsupportedMediaException;
49 import com.sun.xml.internal.org.jvnet.staxex.Base64Data;
50 import com.sun.xml.internal.org.jvnet.staxex.NamespaceContextEx;
51 import com.sun.xml.internal.org.jvnet.staxex.XMLStreamReaderEx;
52 import com.sun.xml.internal.org.jvnet.staxex.XMLStreamWriterEx;
53
54 import javax.activation.DataHandler;
55 import javax.xml.namespace.NamespaceContext;
56 import javax.xml.stream.XMLStreamConstants;
57 import javax.xml.stream.XMLStreamException;
58 import javax.xml.stream.XMLStreamReader;
59 import javax.xml.stream.XMLStreamWriter;
60 import javax.xml.ws.WebServiceException;
61 import javax.xml.ws.soap.MTOMFeature;
62 import javax.xml.bind.attachment.AttachmentMarshaller;
63 import java.io.IOException;
357 @Override
358 public OutputStream writeBinary(String contentType) throws XMLStreamException {
359 throw new UnsupportedOperationException();
360 }
361
362 @Override
363 public void writePCDATA(CharSequence data) throws XMLStreamException {
364 if(data == null)
365 return;
366 if(data instanceof Base64Data){
367 Base64Data binaryData = (Base64Data)data;
368 writeBinary(binaryData.getDataHandler());
369 return;
370 }
371 writeCharacters(data.toString());
372 }
373
374 private void writeBinary(ByteArrayBuffer bab) {
375 try {
376 mtomAttachments.add(bab);
377 writer.setPrefix("xop", XOP_NAMESPACEURI);
378 writer.writeNamespace("xop", XOP_NAMESPACEURI);
379 writer.writeStartElement(XOP_NAMESPACEURI, XOP_LOCALNAME);
380 writer.writeAttribute("href", "cid:"+bab.contentId);
381 writer.writeEndElement();
382 writer.flush();
383 } catch (XMLStreamException e) {
384 throw new WebServiceException(e);
385 }
386 }
387
388 @Override
389 public Object getProperty(String name) throws IllegalArgumentException {
390 // Hack for JDK6's SJSXP
391 if (name.equals("sjsxp-outputstream") && writer instanceof Map) {
392 Object obj = ((Map) writer).get("sjsxp-outputstream");
393 if (obj != null) {
394 return obj;
395 }
396 }
397 return super.getProperty(name);
398 }
496 //To be used with #getTextCharacters
497 private char[] base64EncodedText;
498
499 private String xopHref;
500
501 public MtomXMLStreamReaderEx(MimeMultipartParser mimeMP, XMLStreamReader reader) {
502 super(reader);
503 this.mimeMP = mimeMP;
504 }
505
506 @Override
507 public CharSequence getPCDATA() throws XMLStreamException {
508 if(xopReferencePresent){
509 return base64AttData;
510 }
511 return reader.getText();
512 }
513
514 @Override
515 public NamespaceContextEx getNamespaceContext() {
516 NamespaceContext nsContext = reader.getNamespaceContext();
517 return new MtomNamespaceContextEx(nsContext);
518 }
519
520 @Override
521 public String getElementTextTrim() throws XMLStreamException {
522 throw new UnsupportedOperationException();
523 }
524
525 private static class MtomNamespaceContextEx implements NamespaceContextEx {
526 private final NamespaceContext nsContext;
527
528 public MtomNamespaceContextEx(NamespaceContext nsContext) {
529 this.nsContext = nsContext;
530 }
531
532 @Override
533 public Iterator<Binding> iterator() {
534 throw new UnsupportedOperationException();
535 }
536
537 @Override
538 public String getNamespaceURI(String prefix) {
539 return nsContext.getNamespaceURI(prefix);
540 }
541
542 @Override
543 public String getPrefix(String namespaceURI) {
544 return nsContext.getPrefix(namespaceURI);
545 }
546
547 @Override
548 public Iterator getPrefixes(String namespaceURI) {
549 return nsContext.getPrefixes(namespaceURI);
550 }
551
552 }
553
554 @Override
555 public int getTextLength() {
556 if (xopReferencePresent) {
557 return base64AttData.length();
558 }
559 return reader.getTextLength();
560 }
561
562 @Override
563 public int getTextStart() {
564 if (xopReferencePresent) {
565 return 0;
566 }
567 return reader.getTextStart();
568 }
569
570 @Override
571 public int getEventType() {
|
24 */
25
26 package com.sun.xml.internal.ws.encoding;
27
28 import com.sun.istack.internal.NotNull;
29 import com.sun.xml.internal.bind.DatatypeConverterImpl;
30 import com.sun.xml.internal.ws.api.SOAPVersion;
31 import com.sun.xml.internal.ws.api.WSFeatureList;
32 import com.sun.xml.internal.ws.api.message.Attachment;
33 import com.sun.xml.internal.ws.api.message.AttachmentSet;
34 import com.sun.xml.internal.ws.api.message.Packet;
35 import com.sun.xml.internal.ws.api.pipe.ContentType;
36 import com.sun.xml.internal.ws.api.pipe.StreamSOAPCodec;
37 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
38 import com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory;
39 import com.sun.xml.internal.ws.developer.SerializationFeature;
40 import com.sun.xml.internal.ws.developer.StreamingDataHandler;
41 import com.sun.xml.internal.ws.message.MimeAttachmentSet;
42 import com.sun.xml.internal.ws.streaming.XMLStreamWriterUtil;
43 import com.sun.xml.internal.ws.util.ByteArrayDataSource;
44 import com.sun.xml.internal.ws.util.xml.NamespaceContextExAdaper;
45 import com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter;
46 import com.sun.xml.internal.ws.util.xml.XMLStreamWriterFilter;
47 import com.sun.xml.internal.ws.streaming.MtomStreamWriter;
48 import com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil;
49 import com.sun.xml.internal.ws.server.UnsupportedMediaException;
50 import com.sun.xml.internal.org.jvnet.staxex.Base64Data;
51 import com.sun.xml.internal.org.jvnet.staxex.NamespaceContextEx;
52 import com.sun.xml.internal.org.jvnet.staxex.XMLStreamReaderEx;
53 import com.sun.xml.internal.org.jvnet.staxex.XMLStreamWriterEx;
54
55 import javax.activation.DataHandler;
56 import javax.xml.namespace.NamespaceContext;
57 import javax.xml.stream.XMLStreamConstants;
58 import javax.xml.stream.XMLStreamException;
59 import javax.xml.stream.XMLStreamReader;
60 import javax.xml.stream.XMLStreamWriter;
61 import javax.xml.ws.WebServiceException;
62 import javax.xml.ws.soap.MTOMFeature;
63 import javax.xml.bind.attachment.AttachmentMarshaller;
64 import java.io.IOException;
358 @Override
359 public OutputStream writeBinary(String contentType) throws XMLStreamException {
360 throw new UnsupportedOperationException();
361 }
362
363 @Override
364 public void writePCDATA(CharSequence data) throws XMLStreamException {
365 if(data == null)
366 return;
367 if(data instanceof Base64Data){
368 Base64Data binaryData = (Base64Data)data;
369 writeBinary(binaryData.getDataHandler());
370 return;
371 }
372 writeCharacters(data.toString());
373 }
374
375 private void writeBinary(ByteArrayBuffer bab) {
376 try {
377 mtomAttachments.add(bab);
378 String prefix = writer.getPrefix(XOP_NAMESPACEURI);
379 if (prefix == null || !prefix.equals("xop")) {
380 writer.setPrefix("xop", XOP_NAMESPACEURI);
381 writer.writeNamespace("xop", XOP_NAMESPACEURI);
382 }
383 writer.writeStartElement(XOP_NAMESPACEURI, XOP_LOCALNAME);
384 writer.writeAttribute("href", "cid:"+bab.contentId);
385 writer.writeEndElement();
386 writer.flush();
387 } catch (XMLStreamException e) {
388 throw new WebServiceException(e);
389 }
390 }
391
392 @Override
393 public Object getProperty(String name) throws IllegalArgumentException {
394 // Hack for JDK6's SJSXP
395 if (name.equals("sjsxp-outputstream") && writer instanceof Map) {
396 Object obj = ((Map) writer).get("sjsxp-outputstream");
397 if (obj != null) {
398 return obj;
399 }
400 }
401 return super.getProperty(name);
402 }
500 //To be used with #getTextCharacters
501 private char[] base64EncodedText;
502
503 private String xopHref;
504
505 public MtomXMLStreamReaderEx(MimeMultipartParser mimeMP, XMLStreamReader reader) {
506 super(reader);
507 this.mimeMP = mimeMP;
508 }
509
510 @Override
511 public CharSequence getPCDATA() throws XMLStreamException {
512 if(xopReferencePresent){
513 return base64AttData;
514 }
515 return reader.getText();
516 }
517
518 @Override
519 public NamespaceContextEx getNamespaceContext() {
520 return new NamespaceContextExAdaper(reader.getNamespaceContext());
521 }
522
523 @Override
524 public String getElementTextTrim() throws XMLStreamException {
525 throw new UnsupportedOperationException();
526 }
527
528 @Override
529 public int getTextLength() {
530 if (xopReferencePresent) {
531 return base64AttData.length();
532 }
533 return reader.getTextLength();
534 }
535
536 @Override
537 public int getTextStart() {
538 if (xopReferencePresent) {
539 return 0;
540 }
541 return reader.getTextStart();
542 }
543
544 @Override
545 public int getEventType() {
|