1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.axis.message.addressing.tools.wsdl;
19
20 import org.apache.axis.utils.JavaUtils;
21 import org.apache.axis.utils.Messages;
22 import org.apache.axis.utils.WSDLUtils;
23 import org.apache.axis.wsdl.symbolTable.BindingEntry;
24 import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
25 import org.apache.axis.wsdl.symbolTable.ServiceEntry;
26 import org.apache.axis.wsdl.symbolTable.SymbolTable;
27 import org.apache.axis.wsdl.toJava.Emitter;
28 import org.apache.axis.wsdl.toJava.JavaBindingWriter;
29 import org.apache.axis.wsdl.toJava.JavaClassWriter;
30 import org.apache.axis.wsdl.toJava.Utils;
31
32 import javax.wsdl.Binding;
33 import javax.wsdl.Port;
34 import javax.wsdl.Service;
35
36 import java.io.IOException;
37 import java.io.PrintWriter;
38
39 import java.net.MalformedURLException;
40 import java.net.URL;
41
42 import java.util.Iterator;
43 import java.util.Map;
44 import java.util.Vector;
45
46 /***
47 *
48 * @author Jarek Gawor (gawor@mcs.anl.gov)
49 */
50 public class JavaAddressingServiceImplWriter extends JavaClassWriter {
51
52 private ServiceEntry sEntry;
53 private SymbolTable symbolTable;
54
55 protected JavaAddressingServiceImplWriter(
56 Emitter emitter,
57 ServiceEntry sEntry,
58 SymbolTable symbolTable
59 ) {
60 super(emitter, sEntry.getName() + "AddressingLocator", "service");
61 this.sEntry = sEntry;
62 this.symbolTable = symbolTable;
63 }
64
65
66 protected String getExtendsText() {
67 return "extends " + this.sEntry.getName() + "Locator ";
68 }
69
70 /***
71 * Returns "implements <serviceInterface>".
72 */
73 protected String getImplementsText() {
74 return "implements " + this.sEntry.getName() + "Addressing ";
75 }
76
77 /***
78 * Write the body of the service file.
79 */
80 protected void writeFileBody(PrintWriter pw) throws IOException {
81 Service service = sEntry.getService();
82
83
84 Map portMap = service.getPorts();
85 Iterator portIterator = portMap.values().iterator();
86
87
88 while (portIterator.hasNext()) {
89 Port p = (Port) portIterator.next();
90 Binding binding = p.getBinding();
91
92 if (binding == null) {
93 throw new IOException(
94 Messages.getMessage(
95 "emitFailNoBinding01", new String[] { p.getName() }
96 )
97 );
98 }
99
100 BindingEntry bEntry =
101 symbolTable.getBindingEntry(binding.getQName());
102
103 if (bEntry == null) {
104 throw new IOException(
105 Messages.getMessage(
106 "emitFailNoBindingEntry01",
107 new String[] { binding.getQName().toString() }
108 )
109 );
110 }
111
112 PortTypeEntry ptEntry =
113 symbolTable.getPortTypeEntry(binding.getPortType().getQName());
114
115 if (ptEntry == null) {
116 throw new IOException(
117 Messages.getMessage(
118 "emitFailNoPortType01",
119 new String[] { binding.getPortType().getQName()
120 .toString() }
121 )
122 );
123 }
124
125
126 if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) {
127 continue;
128 }
129
130 String portName = p.getName();
131
132 if (!JavaUtils.isJavaId(portName)) {
133 portName = Utils.xmlNameToJavaClass(portName);
134 }
135
136 String stubClass = bEntry.getName() + "Stub";
137
138 String bindingType =
139 (String) bEntry.getDynamicVar(JavaBindingWriter.INTERFACE_NAME);
140
141 pw.println(
142 " public " + bindingType + " get" + portName +
143 "(org.apache.axis.message.addressing.EndpointReferenceType reference) " +
144 "throws javax.xml.rpc.ServiceException {"
145 );
146 pw.println("\torg.apache.axis.message.addressing.AttributedURI address = reference.getAddress();");
147
148 pw.println("\tif (address == null) {");
149 pw.println("\t\tthrow new javax.xml.rpc.ServiceException(\"No address in EndpointReference\");");
150 pw.println("\t}");
151 pw.println("\tjava.net.URL endpoint;");
152 pw.println("\ttry {");
153 pw.println("\t\tendpoint = new java.net.URL(address.toString());");
154 pw.println("\t} catch (java.net.MalformedURLException e) {");
155 pw.println("\t\tthrow new javax.xml.rpc.ServiceException(e);");
156 pw.println("\t}");
157 pw.println("\t" + bindingType + " _stub = " +
158 "get" + portName + "(endpoint);");
159 pw.println("\tif (_stub != null) {");
160 pw.println("\t\torg.apache.axis.message.addressing.AddressingHeaders headers =");
161 pw.println("\t\t\tnew org.apache.axis.message.addressing.AddressingHeaders();");
162 pw.println("\t\theaders.setTo(address);");
163 pw.println("\t\theaders.setReferenceProperties(reference.getProperties());");
164 pw.println("\t\t((javax.xml.rpc.Stub)_stub)._setProperty(org.apache.axis.message.addressing.Constants.ENV_ADDRESSING_SHARED_HEADERS, headers);");
165 pw.println("\t}");
166 pw.println("\treturn _stub;");
167 pw.println(" }");
168 pw.println();
169 }
170
171 pw.println();
172 }
173
174
175 }
176
177
178