1
19
20 package com.liferay.util.ant;
21
22 import com.liferay.portal.kernel.util.FileUtil;
23 import com.liferay.portal.kernel.util.HtmlUtil;
24 import com.liferay.portal.kernel.util.StringUtil;
25 import com.liferay.portal.kernel.util.Time;
26 import com.liferay.util.xml.XMLFormatter;
27
28 import java.io.File;
29 import java.io.IOException;
30
31 import org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask;
32 import org.apache.axis.tools.ant.wsdl.NamespaceMapping;
33 import org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask;
34 import org.apache.tools.ant.Project;
35
36 import org.dom4j.DocumentException;
37
38
44 public class Java2WsddTask {
45
46 public static String[] generateWsdd(String className, String serviceName)
47 throws IOException {
48
49
51 File tempDir = new File(Time.getTimestamp());
52
53 tempDir.mkdir();
54
55
57 String wsdlFileName = tempDir + "/service.wsdl";
58
59 int pos = className.lastIndexOf(".");
60
61 String packagePath = className.substring(0, pos);
62
63 String[] packagePaths = StringUtil.split(packagePath, ".");
64
65 String namespace = "urn:";
66
67 for (int i = packagePaths.length - 1; i >= 0; i--) {
68 namespace += packagePaths[i];
69
70 if (i > 0) {
71 namespace += ".";
72 }
73 }
74
75 String location = "http://localhost/services/" + serviceName;
76
77 String mappingPackage = packagePath.substring(
78 0, packagePath.lastIndexOf(".")) + ".ws";
79
80 Project project = AntUtil.getProject();
81
82 Java2WsdlAntTask java2Wsdl = new Java2WsdlAntTask();
83
84 NamespaceMapping mapping = new NamespaceMapping();
85
86 mapping.setNamespace(namespace);
87 mapping.setPackage(mappingPackage);
88
89 java2Wsdl.setProject(project);
90 java2Wsdl.setClassName(className);
91 java2Wsdl.setOutput(new File(wsdlFileName));
92 java2Wsdl.setLocation(location);
93 java2Wsdl.setNamespace(namespace);
94 java2Wsdl.addMapping(mapping);
95
96 java2Wsdl.execute();
97
98
100 Wsdl2javaAntTask wsdl2Java = new Wsdl2javaAntTask();
101
102 wsdl2Java.setProject(project);
103 wsdl2Java.setURL(wsdlFileName);
104 wsdl2Java.setOutput(tempDir);
105 wsdl2Java.setServerSide(true);
106 wsdl2Java.setTestCase(false);
107 wsdl2Java.setVerbose(false);
108
109 wsdl2Java.execute();
110
111
113 String deployContent = FileUtil.read(
114 tempDir + "/" + StringUtil.replace(packagePath, ".", "/") +
115 "/deploy.wsdd");
116
117 deployContent = StringUtil.replace(
118 deployContent, packagePath + "." + serviceName + "SoapBindingImpl",
119 className);
120
121 deployContent = _format(deployContent);
122
123 String undeployContent = FileUtil.read(
124 tempDir + "/" + StringUtil.replace(packagePath, ".", "/") +
125 "/undeploy.wsdd");
126
127 undeployContent = _format(undeployContent);
128
129
131 DeleteTask.deleteDirectory(tempDir);
132
133 return new String[] {deployContent, undeployContent};
134 }
135
136 private static String _format(String content) throws IOException {
137 content = HtmlUtil.stripComments(content);
138
139 try {
140 content = XMLFormatter.toString(content);
141 }
142 catch (DocumentException de) {
143 de.printStackTrace();
144 }
145
146 return content;
147 }
148
149 }