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.portal.providers.simplewebservice.util.XList;
016: import com.sun.xml.rpc.encoding.CombinedSerializer;
017: import com.sun.xml.rpc.encoding.SingletonSerializerFactory;
018: import com.sun.xml.rpc.encoding.SingletonDeserializerFactory;
019: import com.sun.xml.rpc.encoding.literal.LiteralSimpleTypeSerializer;
020: import com.sun.xml.rpc.encoding.literal.LiteralArraySerializer;
021:
022: import javax.xml.rpc.Service;
023: import javax.xml.rpc.encoding.TypeMappingRegistry;
024: import javax.xml.rpc.encoding.TypeMapping;
025: import javax.xml.rpc.encoding.SerializerFactory;
026: import javax.xml.rpc.encoding.DeserializerFactory;
027:
028: class DocLiteralSimpleTypeHandler extends SimpleTypeHandler {
029: DocLiteralSimpleTypeHandler(Service service, String encoding) {
030: super (service, encoding);
031: }
032:
033: public void registerSimpleTypeHandlers(
034: ParameterDescriptor descriptor) {
035:
036: context = SerializationContext
037: .createSimpleSerializationContext(descriptor);
038:
039: TypeMappingRegistry registry = service.getTypeMappingRegistry();
040: TypeMapping typeMapping = registry
041: .getTypeMapping(this .encoding);
042:
043: if (typeMapping.isRegistered(context.typeHolderClass,
044: context.typeArrayQName)) {
045: return;
046: }
047:
048: CombinedSerializer primitiveSerializer = getPrimitiveTypeSerializer(context);
049: context.serializer = primitiveSerializer;
050:
051: SerializerFactory stringArraySerializerFactory = new SingletonSerializerFactory(
052: primitiveSerializer);
053: DeserializerFactory stringArrayDeserializerFactory = new SingletonDeserializerFactory(
054: primitiveSerializer);
055: //System.out.println("Registering "+context.typeHolderClass.getName() + " For "+descriptor.getName());
056: typeMapping.register(context.typeHolderClass,
057: context.typeArrayQName, stringArraySerializerFactory,
058: stringArrayDeserializerFactory);
059: }
060:
061: public void registerSimpleTypeArrayHandlers(
062: ParameterDescriptor descriptor) {
063:
064: context = SerializationContext
065: .createSimpleSerializationContext(descriptor);
066:
067: TypeMappingRegistry registry = service.getTypeMappingRegistry();
068: TypeMapping typeMapping = registry
069: .getTypeMapping(this .encoding);
070:
071: if (typeMapping.isRegistered(XList.class, context.typeQName)) {
072: return;
073: }
074:
075: CombinedSerializer primitiveSerializer = getPrimitiveTypeSerializer(context);
076: context.serializer = primitiveSerializer;
077:
078: CombinedSerializer primitiveArraySerializer = getPrimitiveTypeArraySerializer(context);
079: /* primitiveArraySerializer = new ReferenceableSerializerImpl(
080: SimpleTypeSerializer.SERIALIZE_AS_REF,
081: primitiveArraySerializer); */
082:
083: SerializerFactory stringArraySerializerFactory = new SingletonSerializerFactory(
084: primitiveArraySerializer);
085: DeserializerFactory stringArrayDeserializerFactory = new SingletonDeserializerFactory(
086: primitiveArraySerializer);
087: //System.out.println("Registering XList for " + context.typeQName);
088: typeMapping.register(XList.class, context.typeQName,
089: stringArraySerializerFactory,
090: stringArrayDeserializerFactory);
091: }
092:
093: protected CombinedSerializer getPrimitiveTypeSerializer(
094: SerializationContext context) {
095:
096: CombinedSerializer primitiveSerializer = null;
097:
098: primitiveSerializer = new LiteralSimpleTypeSerializer(
099: context.typeArrayQName, DOCLITERALENCODING,
100: context.primitiveTypeEncoder);
101:
102: return primitiveSerializer;
103: }
104:
105: protected CombinedSerializer getPrimitiveTypeArraySerializer(
106: SerializationContext context) {
107:
108: CombinedSerializer primitiveArraySerializer = null;
109:
110: primitiveArraySerializer = new LiteralArraySerializer(
111: context.typeQName, LiteralArraySerializer.NULLABLE,
112: DOCLITERALENCODING,
113: LiteralArraySerializer.DONT_ENCODE_TYPE, null,
114: context.serializer, context.typeHolderClass);
115:
116: return primitiveArraySerializer;
117: }
118:
119: private final String DOCLITERALENCODING = "";
120: }
|