001: /**
002: * Copyright 2003 Sun Microsystems, Inc. All
003: * rights reserved. Use of this product is subject
004: * to license terms. Federal Acquisitions:
005: * Commercial Software -- Government Users
006: * Subject to Standard License Terms and
007: * Conditions.
008: *
009: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
010: * are trademarks or registered trademarks of Sun Microsystems,
011: * Inc. in the United States and other countries.
012: */package com.sun.portal.providers.simplewebservice.rpc;
013:
014: import com.sun.portal.providers.simplewebservice.ParameterDescriptor;
015: import com.sun.xml.rpc.encoding.CombinedSerializer;
016: import com.sun.xml.rpc.encoding.SingletonSerializerFactory;
017: import com.sun.xml.rpc.encoding.SingletonDeserializerFactory;
018: import com.sun.xml.rpc.encoding.literal.LiteralArraySerializer;
019: import com.sun.xml.rpc.util.StructMap;
020: import com.sun.xml.rpc.soap.SOAPVersion;
021:
022: import javax.xml.rpc.Service;
023: import javax.xml.rpc.encoding.SerializerFactory;
024: import javax.xml.rpc.encoding.DeserializerFactory;
025: import java.util.ArrayList;
026:
027: class DocLiteralComplexTypeHandler extends ComplexTypeHandler {
028: DocLiteralComplexTypeHandler(Service service, String encoding) {
029: super (service, encoding);
030: }
031:
032: public void registerComplexTypeHandler(
033: ParameterDescriptor descriptor, int type) {
034: context = SerializationContext
035: .createComplexSerializationContext(descriptor);
036:
037: // Check if f:complex type->java holder class
038: if (isAlreadyRegistered(context.typeHolderClass,
039: context.typeQName)) {
040: return;
041: }
042:
043: CombinedSerializer complexSerializer = null;
044: complexSerializer = createComplexSerializer(descriptor, type);
045:
046: SerializerFactory complexSerializerFactory = new SingletonSerializerFactory(
047: complexSerializer);
048: DeserializerFactory complexDeserializerFactory = new SingletonDeserializerFactory(
049: complexSerializer);
050:
051: if (type == COMPLEX_TYPE_SERIALIZER) {
052: typeMapping.register(StructMap.class, context.typeQName,
053: complexSerializerFactory,
054: complexDeserializerFactory);
055: } else if (type == COMPLEX_ARRAY_TYPE_SERIALIZER) {
056: typeMapping.register(ArrayList.class, context.typeQName,
057: complexSerializerFactory,
058: complexDeserializerFactory);
059: }
060: }
061:
062: protected CombinedSerializer createComplexSerializer(
063: ParameterDescriptor descriptor, int type) {
064:
065: CombinedSerializer complexSerializer = null;
066:
067: if (type == COMPLEX_TYPE_SERIALIZER) {
068: complexSerializer = createComplexTypeSerializer(context,
069: descriptor);
070: /* complexSerializer = new ReferenceableSerializerImpl(
071: CollectionSerializer.SERIALIZE_AS_REF,
072: complexSerializer); */
073:
074: } else if (type == COMPLEX_ARRAY_TYPE_SERIALIZER) {
075: complexSerializer = createComplexTypeArraySerializer(
076: context, descriptor);
077: /* complexSerializer = new ReferenceableSerializerImpl(
078: ObjectSerializerBase.SERIALIZE_AS_REF,
079: complexSerializer); */
080: }
081:
082: return complexSerializer;
083: }
084:
085: protected CombinedSerializer createComplexTypeArraySerializer(
086: SerializationContext context, ParameterDescriptor descriptor) {
087: CombinedSerializer complexArraySerializer = null;
088:
089: complexArraySerializer = new LiteralArraySerializer(
090: context.typeQName, true, "", false, ArrayList.class,
091: null, StructMap.class);
092:
093: return complexArraySerializer;
094: }
095:
096: protected CombinedSerializer createComplexTypeSerializer(
097: SerializationContext context, ParameterDescriptor descriptor) {
098: CombinedSerializer complexSerializer = null;
099:
100: complexSerializer = new LiteralStructureSerializer(
101: context.typeQName,
102: LiteralStructureSerializer.DONT_ENCODE_TYPE,
103: LiteralStructureSerializer.NULLABLE,
104: DOCLITERALENCODING, SOAPVersion.SOAP_11);
105:
106: return complexSerializer;
107: }
108:
109: private final String DOCLITERALENCODING = "";
110:
111: }
|