1.1 --- a/src/share/jaxws_classes/com/sun/xml/internal/ws/db/DatabindingImpl.java Thu Apr 04 19:05:24 2013 -0700 1.2 +++ b/src/share/jaxws_classes/com/sun/xml/internal/ws/db/DatabindingImpl.java Tue Apr 09 14:51:13 2013 +0100 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -32,21 +32,21 @@ 1.11 import java.util.HashMap; 1.12 import java.util.Map; 1.13 1.14 -import javax.xml.namespace.QName; 1.15 import javax.xml.ws.WebServiceFeature; 1.16 1.17 -import com.sun.xml.internal.org.jvnet.ws.message.MessageContext; 1.18 - 1.19 +import com.oracle.webservices.internal.api.databinding.JavaCallInfo; 1.20 +import com.oracle.webservices.internal.api.message.MessageContext; 1.21 import com.sun.xml.internal.ws.api.databinding.EndpointCallBridge; 1.22 -import com.sun.xml.internal.ws.api.databinding.JavaCallInfo; 1.23 import com.sun.xml.internal.ws.api.databinding.WSDLGenInfo; 1.24 import com.sun.xml.internal.ws.api.databinding.Databinding; 1.25 import com.sun.xml.internal.ws.api.databinding.DatabindingConfig; 1.26 import com.sun.xml.internal.ws.api.databinding.ClientCallBridge; 1.27 import com.sun.xml.internal.ws.api.message.Message; 1.28 +import com.sun.xml.internal.ws.api.message.MessageContextFactory; 1.29 import com.sun.xml.internal.ws.api.message.Packet; 1.30 import com.sun.xml.internal.ws.api.model.MEP; 1.31 import com.sun.xml.internal.ws.api.model.SEIModel; 1.32 +import com.sun.xml.internal.ws.api.model.WSDLOperationMapping; 1.33 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort; 1.34 import com.sun.xml.internal.ws.api.pipe.Codec; 1.35 import com.sun.xml.internal.ws.api.pipe.ContentType; 1.36 @@ -57,7 +57,6 @@ 1.37 import com.sun.xml.internal.ws.model.JavaMethodImpl; 1.38 import com.sun.xml.internal.ws.model.RuntimeModeler; 1.39 import com.sun.xml.internal.ws.server.sei.TieHandler; 1.40 -import com.sun.xml.internal.ws.util.QNameMap; 1.41 import com.sun.xml.internal.ws.wsdl.ActionBasedOperationSignature; 1.42 import com.sun.xml.internal.ws.wsdl.DispatchException; 1.43 import com.sun.xml.internal.ws.wsdl.OperationDispatcher; 1.44 @@ -67,22 +66,25 @@ 1.45 * 1.46 * @author shih-chang.chen@oracle.com 1.47 */ 1.48 -public class DatabindingImpl implements Databinding, com.sun.xml.internal.org.jvnet.ws.databinding.Databinding { 1.49 +public class DatabindingImpl implements Databinding { 1.50 1.51 AbstractSEIModelImpl seiModel; 1.52 Map<Method, StubHandler> stubHandlers; 1.53 - QNameMap<TieHandler> wsdlOpMap = new QNameMap<TieHandler>(); 1.54 +// QNameMap<TieHandler> wsdlOpMap = new QNameMap<TieHandler>(); 1.55 + Map<JavaMethodImpl, TieHandler> wsdlOpMap = new HashMap<JavaMethodImpl, TieHandler>(); 1.56 Map<Method, TieHandler> tieHandlers = new HashMap<Method, TieHandler>(); 1.57 OperationDispatcher operationDispatcher; 1.58 OperationDispatcher operationDispatcherNoWsdl; 1.59 boolean clientConfig = false; 1.60 Codec codec; 1.61 + MessageContextFactory packetFactory = null; 1.62 1.63 public DatabindingImpl(DatabindingProviderImpl p, DatabindingConfig config) { 1.64 RuntimeModeler modeler = new RuntimeModeler(config); 1.65 modeler.setClassLoader(config.getClassLoader()); 1.66 seiModel = modeler.buildRuntimeModel(); 1.67 WSDLPort wsdlport = config.getWsdlPort(); 1.68 + packetFactory = new MessageContextFactory(seiModel.getWSBinding().getFeatures()); 1.69 clientConfig = isClientConfig(config); 1.70 if ( clientConfig ) initStubHandlers(); 1.71 seiModel.setDatabinding(this); 1.72 @@ -90,8 +92,8 @@ 1.73 if (operationDispatcher == null) operationDispatcherNoWsdl = new OperationDispatcher(null, seiModel.getWSBinding(), seiModel); 1.74 // if(!clientConfig) { 1.75 for(JavaMethodImpl jm: seiModel.getJavaMethods()) if (!jm.isAsync()) { 1.76 - TieHandler th = new TieHandler(jm, seiModel.getWSBinding()); 1.77 - wsdlOpMap.put(jm.getOperationQName(), th); 1.78 + TieHandler th = new TieHandler(jm, seiModel.getWSBinding(), packetFactory); 1.79 + wsdlOpMap.put(jm, th); 1.80 tieHandlers.put(th.getMethod(), th); 1.81 } 1.82 // } 1.83 @@ -121,7 +123,7 @@ 1.84 // first fill in sychronized versions 1.85 for (JavaMethodImpl m : seiModel.getJavaMethods()) { 1.86 if (!m.getMEP().isAsync) { 1.87 - StubHandler handler = new StubHandler(m); 1.88 + StubHandler handler = new StubHandler(m, packetFactory); 1.89 syncs.put(m.getOperationSignature(), m); 1.90 stubHandlers.put(m.getMethod(), handler); 1.91 } 1.92 @@ -130,22 +132,24 @@ 1.93 JavaMethodImpl sync = syncs.get(jm.getOperationSignature()); 1.94 if (jm.getMEP() == MEP.ASYNC_CALLBACK || jm.getMEP() == MEP.ASYNC_POLL) { 1.95 Method m = jm.getMethod(); 1.96 - StubAsyncHandler handler = new StubAsyncHandler(jm, sync); 1.97 + StubAsyncHandler handler = new StubAsyncHandler(jm, sync, packetFactory); 1.98 stubHandlers.put(m, handler); 1.99 } 1.100 } 1.101 } 1.102 1.103 - public QName resolveOperationQName(Packet req) throws DispatchException { 1.104 - return (operationDispatcher != null)? 1.105 - operationDispatcher.getWSDLOperationQName(req): 1.106 - operationDispatcherNoWsdl.getWSDLOperationQName(req); 1.107 + public JavaMethodImpl resolveJavaMethod(Packet req) throws DispatchException { 1.108 + WSDLOperationMapping m = req.getWSDLOperationMapping(); 1.109 + if (m == null) m = (operationDispatcher != null) ? 1.110 + operationDispatcher.getWSDLOperationMapping(req): 1.111 + operationDispatcherNoWsdl.getWSDLOperationMapping(req); 1.112 + return (JavaMethodImpl) m.getJavaMethod(); 1.113 } 1.114 1.115 public JavaCallInfo deserializeRequest(Packet req) { 1.116 - JavaCallInfo call = new JavaCallInfo(); 1.117 + com.sun.xml.internal.ws.api.databinding.JavaCallInfo call = new com.sun.xml.internal.ws.api.databinding.JavaCallInfo(); 1.118 try { 1.119 - QName wsdlOp = resolveOperationQName(req); 1.120 + JavaMethodImpl wsdlOp = resolveJavaMethod(req); 1.121 TieHandler tie = wsdlOpMap.get(wsdlOp); 1.122 call.setMethod(tie.getMethod()); 1.123 Object[] args = tie.readRequest(req.getMessage()); 1.124 @@ -173,7 +177,9 @@ 1.125 1.126 public Packet serializeRequest(JavaCallInfo call) { 1.127 StubHandler stubHandler = stubHandlers.get(call.getMethod()); 1.128 - return stubHandler.createRequestPacket(call); 1.129 + Packet p = stubHandler.createRequestPacket(call); 1.130 + p.setState(Packet.State.ClientRequest); 1.131 + return p; 1.132 } 1.133 1.134 public Packet serializeResponse(JavaCallInfo call) { 1.135 @@ -188,9 +194,9 @@ 1.136 if (call.getException() instanceof DispatchException) { 1.137 message = ((DispatchException)call.getException()).fault; 1.138 } 1.139 - Packet response = new Packet(); 1.140 - response.setMessage(message); 1.141 - return response; 1.142 + Packet p = (Packet)packetFactory.createContext(message); 1.143 + p.setState(Packet.State.ServerResponse); 1.144 + return p; 1.145 } 1.146 1.147 public ClientCallBridge getClientBridge(Method method) { 1.148 @@ -205,12 +211,13 @@ 1.149 seiModel.getWSBinding(), 1.150 info.getContainer(), seiModel.getEndpointClass(), 1.151 info.isInlineSchemas(), 1.152 - info.getExtensions()); 1.153 + info.isSecureXmlProcessingDisabled(), 1.154 + info.getExtensions()); 1.155 wsdlGen.doGeneration(); 1.156 } 1.157 1.158 public EndpointCallBridge getEndpointBridge(Packet req) throws DispatchException { 1.159 - QName wsdlOp = resolveOperationQName(req); 1.160 + JavaMethodImpl wsdlOp = resolveJavaMethod(req); 1.161 return wsdlOpMap.get(wsdlOp); 1.162 } 1.163 1.164 @@ -228,24 +235,20 @@ 1.165 getCodec().decode(in, ct, p); 1.166 } 1.167 1.168 - public com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo createJavaCallInfo(Method method, Object[] args) { 1.169 - return new JavaCallInfo(method, args); 1.170 + public com.oracle.webservices.internal.api.databinding.JavaCallInfo createJavaCallInfo(Method method, Object[] args) { 1.171 + return new com.sun.xml.internal.ws.api.databinding.JavaCallInfo(method, args); 1.172 } 1.173 1.174 - public MessageContext serializeRequest(com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo call) { 1.175 - return serializeRequest((JavaCallInfo)call); 1.176 - } 1.177 - 1.178 - public com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo deserializeResponse( 1.179 - MessageContext message, com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo call) { 1.180 + public com.oracle.webservices.internal.api.databinding.JavaCallInfo deserializeResponse( 1.181 + MessageContext message, com.oracle.webservices.internal.api.databinding.JavaCallInfo call) { 1.182 return deserializeResponse((Packet)message, (JavaCallInfo)call); 1.183 } 1.184 1.185 - public com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo deserializeRequest(MessageContext message) { 1.186 + public com.oracle.webservices.internal.api.databinding.JavaCallInfo deserializeRequest(MessageContext message) { 1.187 return deserializeRequest((Packet)message); 1.188 } 1.189 1.190 - public MessageContext serializeResponse(com.sun.xml.internal.org.jvnet.ws.databinding.JavaCallInfo call) { 1.191 - return serializeResponse((JavaCallInfo)call); 1.192 + public MessageContextFactory getMessageContextFactory() { 1.193 + return packetFactory; 1.194 } 1.195 }