[jboss-user] [Beginners Corner] - Trying to test my first SOAP-driven Web Service

ClarkValentine do-not-reply at jboss.com
Thu Oct 16 14:50:26 EDT 2008


After the excellent assistance I received the other day, I have a very simple web service deployed:

My POJO is:
package com.sample.test;
  | 
  | @javax.jws.WebService
  | public class HelloService {
  | 	@javax.jws.WebMethod
  | 	public String sayHello( @javax.jws.WebParam String name ) {
  | 		return "Hello, " + name;
  | 	}
  | }

The web.xml is:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
  | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  | xsi:schemaLocation=
  | "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  | - <servlet>
  |   <servlet-name>HelloService</servlet-name> 
  |   <servlet-class>com.sample.test.HelloService</servlet-class> 
  |   </servlet>
  | - <servlet-mapping>
  |   <servlet-name>HelloService</servlet-name> 
  |   <url-pattern>/hello</url-pattern> 
  |   </servlet-mapping>
  |   </web-app>

The WSDL produced when I deploy this is:
<?xml version="1.0" encoding="UTF-8"?>
  | <definitions name="HelloServiceService" 
  | targetNamespace="http://test.sample.com/" 
  | xmlns="http://schemas.xmlsoap.org/wsdl/" 
  | xmlns:tns="http://test.sample.com/" 
  | xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  | xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  |   <types>
  |     <xs:schema targetNamespace="http://test.sample.com/" 
  | version="1.0" xmlns:tns="http://test.sample.com/" 
  | xmlns:xs="http://www.w3.org/2001/XMLSchema">
  |    <xs:element name="sayHello" type="tns:sayHello"/>
  |    <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
  | 
  |    <xs:complexType name="sayHello">
  |     <xs:sequence>
  |      <xs:element minOccurs="0" name="arg0" type="xs:string"/>
  |     </xs:sequence>
  |    </xs:complexType>
  | 
  |    <xs:complexType name="sayHelloResponse">
  |     <xs:sequence>
  |      <xs:element minOccurs="0" name="return" type="xs:string"/>
  |     </xs:sequence>
  |    </xs:complexType>
  |   </xs:schema>
  |   </types>
  | 
  |   <message name="HelloService_sayHelloResponse">
  |     <part name="sayHelloResponse" element="tns:sayHelloResponse">
  |     </part>
  |   </message>
  | 
  |   <message name="HelloService_sayHello">
  |     <part name="sayHello" element="tns:sayHello">
  |     </part>
  |   </message>
  | 
  |   <portType name="HelloService">
  |     <operation name="sayHello" parameterOrder="sayHello">
  |       <input message="tns:HelloService_sayHello">
  |     </input>
  |       <output message="tns:HelloService_sayHelloResponse">
  |     </output>
  |     </operation>
  |   </portType>
  | 
  |   <binding name="HelloServiceBinding" type="tns:HelloService">
  |     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  | 
  |     <operation name="sayHello">
  |       <soap:operation soapAction=""/>
  |       <input>
  |         <soap:body use="literal"/>
  |       </input>
  |       <output>
  |         <soap:body use="literal"/>
  |       </output>
  |     </operation>
  | 
  |   </binding>
  | 
  |   <service name="HelloServiceService">
  |     <port name="HelloServicePort" binding="tns:HelloServiceBinding">
  |       <soap:address location="http://HootyOwl.sample.com:8080/helloService/hello"/>
  |     </port>
  |   </service>
  | </definitions>

Now, I'm trying to test with the following ugly client code:
import java.net.*;
  | import java.io.*;
  | 
  | public class SOAPClient01
  | {
  | 
  |     public final static String DEFAULT_SERVER = "http://hootyowl.sample.com";
  |     public static final String DEFAULT_PORT = "8080";
  |     public static final String SERVICE_NAME = "helloService/hello";
  |     public static final String SOAP_ACTION = "hootyowl.sample.com";
  | 
  |     public static void main(String[] args)   {		
  | 	try   {
  | 		//URL u = new URL(DEFAULT_SERVER+"/"+SERVICE_NAME);
  | 		URL u = new URL(DEFAULT_SERVER+":"+DEFAULT_PORT+"/"+SERVICE_NAME);
  | 		URLConnection uc = u.openConnection();
  | 		HttpURLConnection connection = (HttpURLConnection) uc;
  | 		
  | 		connection.setDoOutput(true);
  | 		connection.setDoInput(true);
  | 		connection.setRequestMethod("POST");
  | 		connection.setRequestProperty("SOAPAction", SOAP_ACTION);
  | 		
  | 		OutputStream out = connection.getOutputStream();
  | 		Writer wout = new OutputStreamWriter(out);
  | 		
  | 		wout.write("<?xml version='1.0'?>\r\n");  
  | 		wout.write("<SOAP-ENV:Envelope ");
  | 		wout.write("xmlns:SOAP-ENV=");
  | 		wout.write(
  | 			   "'http://schemas.xmlsoap.org/soap/envelope/' "
  | 			   );
  | 		wout.write("xmlns:tns='test.sample.com'");
  | 		wout.write("xmlns:xsi=");
  | 		wout.write(
  | 			   "'http://www.w3.org/2001/XMLSchema-instance'>\r\n"); 
  | 		wout.write("  <SOAP-ENV:Body> \r\n");
  | 		wout.write("    <tns:sayHello>");
  | 		//		wout.write("\t<tns:arg0>Clark</tns:arg0>\r\n"
  | 		//	   + "</tns:sayHello>\r\n"); 
  | 		wout.write("Clark");
  | 		wout.write("</tns:sayHello>");
  | 		wout.write("  </SOAP-ENV:Body>\r\n"); 
  | 		wout.write("</SOAP-ENV:Envelope>\r\n"); 
  | 		
  | 		wout.flush();
  | 		wout.close();
  | 		
  | 
  | 		InputStream in = connection.getInputStream();
  | 		int c;
  | 		while ((c = in.read()) != -1) System.out.write(c);
  | 		in.close();
  | 		
  | 	    }
  | 	catch (IOException e)   {
  | 		System.err.println(e); 
  | 	    }
  | 	
  |     } // end main
  | 
  | } 


The SOAP produced looks like this:
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:tns='test.sample.com'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
  |   <SOAP-ENV:Body>
  |     <tns:sayHello>Clark</tns:sayHello>  </SOAP-ENV:Body>
  | </SOAP-ENV:Envelope>
  | 

I'm receiving the following output: 
java.io.IOException: Server returned HTTP response code: 400 for URL: http://hootyowl.sample.com:8080/helloService/hello

(I'm using JBoss 4.2.3 GA on RedHat Enterprise 4, JDK 1.6.)

Two questions: 1) Is this error related to my code, or am I not communicating with the server correctly? 2) What am I doing wrong, if I can ask so general a question?

Thanks in advance!

- Clark, still a newbie

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4182757#4182757

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4182757



More information about the jboss-user mailing list