You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/06/29 12:11:26 UTC
svn commit: r551842 - in /incubator/cxf/trunk:
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/
systests/src/test/java/org/apache/cxf/systest/handlers/ testutils/sr...
Author: jliu
Date: Fri Jun 29 03:11:21 2007
New Revision: 551842
URL: http://svn.apache.org/viewvc?view=rev&rev=551842
Log:
DataSource and JaxB element now work with Dispatch XML Binding.
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchOutInterceptor.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/DispatchHandlerInvocationTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerServer.java
incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_xml_http/wrapped/GreeterImpl.java
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java Fri Jun 29 03:11:21 2007
@@ -108,9 +108,7 @@
}
} else {
//JAXBElement
- W3CDOMStreamWriter xmlWriter = (W3CDOMStreamWriter)message
- .getContent(XMLStreamWriter.class);
- source = new DOMSource(xmlWriter.getDocument().getDocumentElement());
+ source = message.getContent(Source.class);
}
}
} else {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java Fri Jun 29 03:11:21 2007
@@ -19,16 +19,21 @@
package org.apache.cxf.jaxws.interceptors;
+import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Logger;
+import javax.activation.DataSource;
+import javax.mail.util.ByteArrayDataSource;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPMessage;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;
@@ -39,6 +44,7 @@
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.SoapVersion;
import org.apache.cxf.databinding.DataReader;
+import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
import org.apache.cxf.interceptor.Fault;
@@ -47,6 +53,7 @@
import org.apache.cxf.message.Message;
import org.apache.cxf.message.XMLMessage;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.staxutils.W3CDOMStreamWriter;
public class DispatchInInterceptor extends AbstractInDatabindingInterceptor {
@@ -70,11 +77,14 @@
try {
InputStream is = message.getContent(InputStream.class);
-
+ Object obj = null;
+ org.apache.cxf.service.Service service =
+ message.getExchange().get(org.apache.cxf.service.Service.class);
+
+
if (message instanceof SoapMessage) {
SOAPMessage soapMessage = newSOAPMessage(is, ((SoapMessage)message).getVersion());
- Object obj;
if (type.equals(SOAPMessage.class)) {
obj = soapMessage;
} else if (type.equals(SOAPBody.class)) {
@@ -94,21 +104,40 @@
obj = dataReader.read(n);
}
}
- message.setContent(Object.class, obj);
+
message.setContent(SOAPMessage.class, soapMessage);
} else if (message instanceof XMLMessage) {
- new StaxInInterceptor().handleMessage(message);
-
- DataReader<XMLStreamReader> dataReader = getDataReader(message);
- Class<?> readType = type;
- if (readType == Object.class) {
- readType = null;
+ if (type.equals(DataSource.class)) {
+ try {
+ obj = new ByteArrayDataSource(is, (String) message.get(Message.CONTENT_TYPE));
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+
+ } else {
+ new StaxInInterceptor().handleMessage(message);
+
+ DataReader<XMLStreamReader> dataReader = getDataReader(message);
+ Class<?> readType = type;
+ if (readType == Object.class) {
+ readType = null;
+ }
+ obj = dataReader.read(null, message.getContent(XMLStreamReader.class), readType);
+
+ if (!type.equals(Source.class)) {
+ //JAXB, need to make a Source format available for Logical handler
+ DataWriter<XMLStreamWriter> dataWriter =
+ service.getDataBinding().createWriter(XMLStreamWriter.class);
+ W3CDOMStreamWriter xmlWriter = new W3CDOMStreamWriter();
+ dataWriter.write(obj, xmlWriter);
+
+ Source source = new DOMSource(xmlWriter.getDocument().getDocumentElement());
+ message.setContent(Source.class, source);
+ }
}
- Object obj = dataReader.read(null, message.getContent(XMLStreamReader.class), readType);
-
- message.setContent(Object.class, obj);
}
+ message.setContent(Object.class, obj);
is.close();
} catch (Exception e) {
throw new Fault(e);
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchOutInterceptor.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchOutInterceptor.java Fri Jun 29 03:11:21 2007
@@ -25,6 +25,7 @@
import java.util.logging.Logger;
import javax.activation.DataSource;
+import javax.xml.parsers.ParserConfigurationException;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
@@ -32,6 +33,7 @@
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
+import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.Service;
@@ -47,7 +49,7 @@
import org.apache.cxf.message.Message;
import org.apache.cxf.message.XMLMessage;
import org.apache.cxf.phase.Phase;
-import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.staxutils.W3CDOMStreamWriter;
import org.apache.cxf.wsdl.WSDLConstants;
public class DispatchOutInterceptor extends AbstractOutDatabindingInterceptor {
@@ -61,7 +63,6 @@
public void handleMessage(Message message) throws Fault {
Service.Mode m = message.getExchange().get(Service.Mode.class);
- OutputStream os = message.getContent(OutputStream.class);
Object obj = message.getContent(Object.class);
org.apache.cxf.service.Service service =
message.getExchange().get(org.apache.cxf.service.Service.class);
@@ -122,18 +123,18 @@
// no conversion needed
} else {
// JAXB element
- DataWriter<XMLStreamWriter> dataWriter = getDataWriter(message, service,
- XMLStreamWriter.class);
- XMLStreamWriter xmlWriter = message.getContent(XMLStreamWriter.class);
- // W3CDOMStreamWriter xmlWriter = new W3CDOMStreamWriter();
-
- if (xmlWriter == null) {
- xmlWriter = StaxUtils.createXMLStreamWriter(os, "UTF-8");
+ try {
+ DataWriter<XMLStreamWriter> dataWriter = getDataWriter(message, service,
+ XMLStreamWriter.class);
+ W3CDOMStreamWriter xmlWriter = new W3CDOMStreamWriter();
+ dataWriter.write(obj, xmlWriter);
+
+ Source source = new DOMSource(xmlWriter.getDocument().getDocumentElement());
+ message.setContent(Object.class, source);
+ } catch (ParserConfigurationException e) {
+ throw new Fault(new org.apache.cxf.common.i18n.Message("EXCEPTION_WRITING_OBJECT",
+ LOG), e);
}
-
- dataWriter.write(obj, xmlWriter);
- message.setContent(XMLStreamWriter.class, xmlWriter);
-
}
}
message.getInterceptorChain().add(ending);
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/DispatchHandlerInvocationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/DispatchHandlerInvocationTest.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/DispatchHandlerInvocationTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/DispatchHandlerInvocationTest.java Fri Jun 29 03:11:21 2007
@@ -24,12 +24,15 @@
import java.util.List;
import java.util.Set;
+import javax.activation.DataSource;
+import javax.activation.URLDataSource;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
+import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
@@ -42,22 +45,26 @@
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
+import javax.xml.ws.http.HTTPException;
import javax.xml.ws.soap.SOAPFaultException;
-
+import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.apache.handlers.AddNumbersService;
import org.apache.handlers.types.AddNumbersResponse;
import org.apache.handlers.types.ObjectFactory;
+import org.apache.hello_world_xml_http.wrapped.XMLService;
import org.junit.BeforeClass;
import org.junit.Test;
public class DispatchHandlerInvocationTest extends AbstractBusClientServerTestBase {
- static QName serviceName = new QName("http://apache.org/handlers", "AddNumbersService");
- static QName portName = new QName("http://apache.org/handlers", "AddNumbersPort");
-
+ private final QName serviceName = new QName("http://apache.org/handlers", "AddNumbersService");
+ private final QName portName = new QName("http://apache.org/handlers", "AddNumbersPort");
+
+ private final QName portNameXML = new QName("http://apache.org/hello_world_xml_http/wrapped",
+ "XMLDispatchPort");
@BeforeClass
public static void startServers() throws Exception {
assertTrue("server did not launch correctly", launchServer(HandlerServer.class));
@@ -103,10 +110,9 @@
TestHandler handler = new TestHandler();
TestSOAPHandler soapHandler = new TestSOAPHandler();
addHandlersProgrammatically(disp, handler, soapHandler);
-
- InputStream is2 = this.getClass().getResourceAsStream("resources/GreetMeDocLiteralReq.xml");
+ InputStream is = this.getClass().getResourceAsStream("resources/GreetMeDocLiteralReq.xml");
MessageFactory factory = MessageFactory.newInstance();
- SOAPMessage soapReq = factory.createMessage(null, is2);
+ SOAPMessage soapReq = factory.createMessage(null, is);
DOMSource domReqMessage = new DOMSource(soapReq.getSOAPPart());
//XMLUtils.writeTo(domReqMessage, System.out);
@@ -187,7 +193,155 @@
.indexOf("is not valid in PAYLOAD mode with SOAP/HTTP binding") > -1);
}
}
-
+
+ @Test
+ public void testInvokeWithDOMSourcMessageModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ Dispatch<DOMSource> disp = service.createDispatch(portNameXML, DOMSource.class, Mode.MESSAGE);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ InputStream is = getClass().getResourceAsStream("/messages/XML_GreetMeDocLiteralReq.xml");
+ MessageFactory factory = MessageFactory.newInstance();
+ SOAPMessage soapReq = factory.createMessage(null, is);
+ DOMSource domReqMessage = new DOMSource(soapReq.getSOAPPart());
+
+ //XMLUtils.writeTo(domReqMessage, System.out);
+ DOMSource response = disp.invoke(domReqMessage);
+ assertNotNull(response);
+ }
+
+ @Test
+ public void testInvokeWithDOMSourcPayloadModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ Dispatch<DOMSource> disp = service.createDispatch(portNameXML, DOMSource.class, Mode.PAYLOAD);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ InputStream is = getClass().getResourceAsStream("/messages/XML_GreetMeDocLiteralReq.xml");
+ MessageFactory factory = MessageFactory.newInstance();
+ SOAPMessage soapReq = factory.createMessage(null, is);
+ DOMSource domReqMessage = new DOMSource(soapReq.getSOAPPart());
+
+ //XMLUtils.writeTo(domReqMessage, System.out);
+ DOMSource response = disp.invoke(domReqMessage);
+ assertNotNull(response);
+ }
+
+ @Test
+ public void testInvokeWithDataSourcMessageModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ Dispatch<DataSource> disp = service.createDispatch(portNameXML, DataSource.class, Mode.MESSAGE);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ URL is = getClass().getResource("/messages/XML_GreetMeDocLiteralReq.xml");
+ DataSource ds = new URLDataSource(is);
+
+ DataSource response = disp.invoke(ds);
+ assertNotNull(response);
+ //IOUtils.copy(response.getInputStream(), System.out);
+ }
+
+ @Test
+ public void testInvokeWithDataSourcPayloadModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ Dispatch<DataSource> disp = service.createDispatch(portNameXML, DataSource.class, Mode.PAYLOAD);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ URL is = getClass().getResource("/messages/XML_GreetMeDocLiteralReq.xml");
+ DataSource ds = new URLDataSource(is);
+
+ try {
+ disp.invoke(ds);
+ fail("Did not get expected exception");
+ } catch (HTTPException e) {
+ assertEquals(e.getCause().getMessage(),
+ "DataSource is not valid in PAYLOAD mode with XML/HTTP binding.");
+ }
+ }
+
+ @Test
+ public void testInvokeWithJAXBMessageModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ JAXBContext jc = JAXBContext.newInstance("org.apache.hello_world_xml_http.wrapped.types");
+ Dispatch<Object> disp = service.createDispatch(portNameXML, jc, Mode.MESSAGE);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ org.apache.hello_world_xml_http.wrapped.types.GreetMe req =
+ new org.apache.hello_world_xml_http.wrapped.types.GreetMe();
+ req.setRequestType("tli");
+
+ Object response = disp.invoke(req);
+ assertNotNull(response);
+ org.apache.hello_world_xml_http.wrapped.types.GreetMeResponse value =
+ (org.apache.hello_world_xml_http.wrapped.types.GreetMeResponse)response;
+ assertEquals("Hello tli", value.getResponseType());
+ }
+
+ @Test
+ public void testInvokeWithJAXBPayloadModeXMLBinding() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+ assertNotNull(wsdl);
+
+ XMLService service = new XMLService();
+ assertNotNull(service);
+
+ JAXBContext jc = JAXBContext.newInstance("org.apache.hello_world_xml_http.wrapped.types");
+ Dispatch<Object> disp = service.createDispatch(portNameXML, jc, Mode.PAYLOAD);
+
+ TestHandlerXMLBinding handler = new TestHandlerXMLBinding();
+ TestSOAPHandler soapHandler = new TestSOAPHandler();
+ addHandlersProgrammatically(disp, handler, soapHandler);
+
+ org.apache.hello_world_xml_http.wrapped.types.GreetMe req =
+ new org.apache.hello_world_xml_http.wrapped.types.GreetMe();
+ req.setRequestType("tli");
+
+ Object response = disp.invoke(req);
+ assertNotNull(response);
+ org.apache.hello_world_xml_http.wrapped.types.GreetMeResponse value =
+ (org.apache.hello_world_xml_http.wrapped.types.GreetMeResponse)response;
+ assertEquals("Hello tli", value.getResponseType());
+ }
+
public void addHandlersProgrammatically(BindingProvider bp, Handler...handlers) {
List<Handler> handlerChain = bp.getBinding().getHandlerChain();
assertNotNull(handlerChain);
@@ -202,7 +356,10 @@
Boolean outbound = (Boolean)ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outbound) {
LogicalMessage msg = ctx.getMessage();
- JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
+ JAXBContext jaxbContext = JAXBContext
+ .newInstance(ObjectFactory.class,
+ org.apache.hello_world_xml_http.wrapped.types.ObjectFactory.class);
+
Object payload = ((JAXBElement)msg.getPayload(jaxbContext)).getValue();
org.apache.handlers.types.AddNumbers req =
(org.apache.handlers.types.AddNumbers)payload;
@@ -218,6 +375,33 @@
assertEquals(200, res.getReturn());
}
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.toString());
+ }
+ return true;
+ }
+ public boolean handleFault(LogicalMessageContext ctx) {
+ return true;
+ }
+ public void close(MessageContext arg0) {
+ }
+ }
+
+ class TestHandlerXMLBinding implements LogicalHandler<LogicalMessageContext> {
+ public boolean handleMessage(LogicalMessageContext ctx) {
+ try {
+ LogicalMessage msg = ctx.getMessage();
+
+ Source payload = msg.getPayload();
+ assertNotNull(payload);
+
+ if (payload instanceof DOMSource) {
+ DOMSource ds = (DOMSource)payload;
+ System.out.println("-------------");
+ XMLUtils.writeTo(ds, System.out);
+ }
+
} catch (Exception e) {
e.printStackTrace();
fail(e.toString());
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerServer.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerServer.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerServer.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerServer.java Fri Jun 29 03:11:21 2007
@@ -28,6 +28,10 @@
Object implementor = new AddNumbersImpl();
String address = "http://localhost:9025/handlers/AddNumbersService/AddNumbersPort";
Endpoint.publish(address, implementor);
+
+ Object implementor1 = new org.apache.hello_world_xml_http.wrapped.GreeterImpl();
+ String address1 = "http://localhost:9007/XMLService/XMLDispatchPort";
+ Endpoint.publish(address1, implementor1);
}
public static void main(String[] args) {
Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_xml_http/wrapped/GreeterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_xml_http/wrapped/GreeterImpl.java?view=diff&rev=551842&r1=551841&r2=551842
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_xml_http/wrapped/GreeterImpl.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_xml_http/wrapped/GreeterImpl.java Fri Jun 29 03:11:21 2007
@@ -32,7 +32,7 @@
public class GreeterImpl implements Greeter {
public String greetMe(String me) {
- System.out.println("Executing operation greetMe\n");
+ System.out.println("Executing operation greetMe\n" + me);
return "Hello " + me;
}