/******************************************************************************* | |
* Copyright (c) 2009 by SAP AG, Walldorf. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* SAP AG - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence.serializer; | |
import static org.eclipse.jst.ws.jaxws.dom.runtime.persistence.WPAnnotationFeatures.WP_ANNOTATION; | |
import org.eclipse.jdt.core.IJavaElement; | |
import org.eclipse.jdt.core.IMethod; | |
import org.eclipse.jdt.core.ITypeParameter; | |
import org.eclipse.jdt.core.JavaModelException; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebMethod; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebParam; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.api.SOAPBindingStyle; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.api.WebParamKind; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.JaxWsWorkspaceResource; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.WPAnnotationFeatures; | |
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.serializer.ParameterSerializerAdapter; | |
import org.eclipse.jst.ws.jaxws.utils.annotations.AnnotationFactory; | |
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotation; | |
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotationInspector; | |
import org.eclipse.jst.ws.jaxws.utils.annotations.IParamValuePair; | |
public class ParameterSerializerAdapterTest extends SerializerAdapterTestFixture | |
{ | |
private MyParameterSerializerAdapter adapter; | |
private IMethod method; | |
private IWebMethod wsMethod; | |
private IWebParam webParam; | |
private IAnnotationInspector inspector; | |
public void setUp() throws Exception | |
{ | |
super.setUp(); | |
resource.startSynchronizing(); | |
adapter = new MyParameterSerializerAdapter(resource); | |
method = seiType.createMethod("public void method(int param1);", null, false, null); | |
wsMethod = domUtil.findWebMethodByImpl(sei, domUtil.calcImplementation(method)); | |
webParam = wsMethod.getParameters().get(0); | |
adapter.setTarget(webParam); | |
resource.disableSaving(); | |
inspector = AnnotationFactory.createAnnotationInspector(seiType); | |
} | |
public void testGetAnnotationKind() throws Exception | |
{ | |
// IN case | |
webParam.setKind(WebParamKind.IN); | |
IAnnotation<? extends IJavaElement> annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(0, annotation.getParamValuePairs().size()); | |
// INOUT case | |
webParam.setKind(WebParamKind.INOUT); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
IParamValuePair paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("mode", paramValue.getParam()); | |
assertTrue(WPAnnotationFeatures.WEB_PARAM_MODE_INOUT.endsWith(paramValue.getValue().toString())); | |
// OUT case | |
webParam.setKind(WebParamKind.OUT); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("mode", paramValue.getParam()); | |
assertTrue(WPAnnotationFeatures.WEB_PARAM_MODE_OUT.endsWith(paramValue.getValue().toString())); | |
} | |
public void testGetAnnotationHeader() throws Exception | |
{ | |
// not in header case | |
webParam.setHeader(false); | |
IAnnotation<? extends IJavaElement> annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(0, annotation.getParamValuePairs().size()); | |
// in header case | |
webParam.setHeader(true); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
IParamValuePair paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("header", paramValue.getParam()); | |
assertEquals("true", paramValue.getValue().toString()); | |
} | |
public void testGetAnnotationName() throws Exception | |
{ | |
webParam.setName("arg0"); | |
IAnnotation<? extends IJavaElement> annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(0, annotation.getParamValuePairs().size()); | |
// in header case | |
webParam.setName("changed"); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
IParamValuePair paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("name", paramValue.getParam()); | |
assertEquals("changed", paramValue.getValue().toString()); | |
} | |
public void testGetAnnotationPartName() throws Exception | |
{ | |
wsMethod.setSoapBindingStyle(SOAPBindingStyle.RPC); | |
webParam.setPartName("arg0"); | |
IAnnotation<? extends IJavaElement> annotation = adapter.getAnnotation(); | |
assertEquals(WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(0, annotation.getParamValuePairs().size()); | |
// in header case | |
webParam.setPartName("changed"); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
IParamValuePair paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("partName", paramValue.getParam()); | |
assertEquals("changed", paramValue.getValue().toString()); | |
} | |
public void testChangeNameChangesPartName() throws Exception | |
{ | |
resource.enableSaving(); | |
webParam.setName("changed"); | |
IAnnotation<ITypeParameter> annotation = inspector.inspectParam(method.getTypeParameter(webParam.getImplementation()), WP_ANNOTATION); | |
assertNotNull(annotation); | |
assertEquals("changed", annotation.getPropertyValue("name")); | |
assertEquals(null, annotation.getPropertyValue("partName")); | |
} | |
public void testChangeNameDoesNotChangePartNameIfPartNameInAnnotation() throws Exception | |
{ | |
method = seiType.createMethod("public void method1(@javax.jws.WebParam(name=\"param1\", partName=\"param1Part\") int param1);", null, false, null); | |
wsMethod = testUtil.findWebMethodByName(sei, "method1"); | |
webParam = testUtil.findParam(wsMethod, "param1"); | |
wsMethod.setSoapBindingStyle(SOAPBindingStyle.RPC); | |
resource.enableSaving(); | |
webParam.setName("test"); | |
IAnnotation<ITypeParameter> annotation = inspector.inspectParam(method.getTypeParameter(webParam.getImplementation()), WP_ANNOTATION); | |
assertNotNull(annotation); | |
assertEquals("param1Part", annotation.getPropertyValue("partName")); | |
} | |
public void testGetAnnotationTargetNS() throws Exception | |
{ | |
wsMethod.setSoapBindingStyle(SOAPBindingStyle.RPC); | |
webParam.setTargetNamespace("http://com.sap/test"); | |
IAnnotation<? extends IJavaElement> annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(0, annotation.getParamValuePairs().size()); | |
// changed target namespace case | |
webParam.setTargetNamespace("http://changed"); | |
annotation = adapter.getAnnotation(); | |
assertEquals(WPAnnotationFeatures.WP_ANNOTATION, annotation.getAnnotationName()); | |
assertEquals(1, annotation.getParamValuePairs().size()); | |
IParamValuePair paramValue = annotation.getParamValuePairs().iterator().next(); | |
assertEquals("targetNamespace", paramValue.getParam()); | |
assertEquals("http://changed", paramValue.getValue().toString()); | |
} | |
public void testSaveAnnotation() throws Exception | |
{ | |
wsMethod.setSoapBindingStyle(SOAPBindingStyle.DOCUMENT); | |
webParam.setName("changed"); | |
webParam.setKind(WebParamKind.INOUT); | |
webParam.setPartName("different"); | |
webParam.setHeader(true); | |
resource.enableSaving(); | |
webParam.setTargetNamespace("http://changed/terget/ns"); | |
IAnnotation<ITypeParameter> annotation = inspector.inspectParam(method.getTypeParameter(webParam.getImplementation()), WP_ANNOTATION); | |
assertNotNull(annotation); | |
assertEquals(4, annotation.getParamValuePairs().size()); | |
assertEquals("changed", annotation.getPropertyValue("name")); | |
assertTrue(WPAnnotationFeatures.WEB_PARAM_MODE_INOUT.endsWith(annotation.getPropertyValue("mode"))); | |
assertEquals("http://changed/terget/ns", annotation.getPropertyValue("targetNamespace")); | |
wsMethod.setSoapBindingStyle(SOAPBindingStyle.RPC); | |
webParam.setPartName("different"); | |
// create new inspector cause source has been changed | |
inspector = AnnotationFactory.createAnnotationInspector(seiType); | |
annotation = inspector.inspectParam(method.getTypeParameter(webParam.getImplementation()), WP_ANNOTATION); | |
assertEquals(5, annotation.getParamValuePairs().size()); | |
assertEquals("different", annotation.getPropertyValue("partName")); | |
} | |
public void testEmptyAnnotationRemoved() throws JavaModelException | |
{ | |
method = seiType.createMethod("public void method1(@javax.jws.WebParam(name=\"param1\") int param1);", null, false, null); | |
wsMethod = testUtil.findWebMethodByName(sei, "method1"); | |
webParam = testUtil.findParam(wsMethod, "param1"); | |
resource.enableSaving(); | |
webParam.setName("arg0"); | |
IAnnotation<ITypeParameter>annotation = inspector.inspectParam(method.getTypeParameter(webParam.getImplementation()), WP_ANNOTATION); | |
assertNull("Empty annotation has not been removed", annotation); | |
} | |
protected class MyParameterSerializerAdapter extends ParameterSerializerAdapter | |
{ | |
public MyParameterSerializerAdapter(JaxWsWorkspaceResource resource) { | |
super(resource); | |
} | |
public IAnnotation<? extends IJavaElement> getAnnotation() throws JavaModelException { | |
return super.getAnnotation(); | |
} | |
} | |
} |