# Webservice Einbinden wsdl



## Nud3l (21. Jun 2012)

Hi,

ich hatte schon unter Deployment das Theme veröffentlicht vielleicht ist es dort falsch. 

Ich weis nicht woran es liegt ob an den Webservice oder an meinen Maven Einstellungen daher hier ein Link zum anderem Thread. 

Eine Aussage bezüglich wo es hapert würde mir schon helfen.

Webservice Einbinden einer WSDL


----------



## Nud3l (22. Jun 2012)

Hallo nach etwas recherche habe ich heraus gefunden das ich wohl hier richtiger bin und das es an der Annotaion des Webservice oder an der web.xml und an der sun-jaxws.xml liegen muss. 

Ich habe jetzt einiges um gestellt, aber es funktioniert gar nichts mehr. Also in meinem Glassfish wird der Services nicht mal erkannt und angezeigt. Kann mir jemand sagen was an dem Daten falsch ist.. 

Hier mal ein Auszug aus meinem Programm. 

web.xml
[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

	<display-name>Mein Webservice</display-name>

	<listener>
		<listener-class>
			com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
	</listener>

	<servlet>
		<servlet-name>WS1JaxWsServlet</servlet-name>
		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<!-- 		<load-on-startup>1</load-on-startup> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>WS1JaxWsServlet</servlet-name>
		<url-pattern>/WS1</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>WS2JaxWsServlet</servlet-name>
		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<!-- 		<load-on-startup>1</load-on-startup> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>WS2JaxWsServlet</servlet-name>
		<url-pattern>/WS2</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>WS3JaxWsServlet</servlet-name>
		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<!-- 		<load-on-startup>1</load-on-startup> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>WS3JaxWsServlet</servlet-name>
		<url-pattern>/WS3</url-pattern>
	</servlet-mapping>

</web-app>[/XML]

sun-jaxws.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
	version="2.0">
	<endpoint name='WS1' implementation='com.pack.service.WS1Impl'
		url-pattern='/WS1' wsdl="WEB-INF/wsdl/WS1.wsdl" />
	<endpoint name='WS2' implementation='com.pack.service.WS2Impl'
		url-pattern='/WS2' wsdl="WEB-INF/wsdl/WS2.wsdl" />
	<endpoint name='WS3' implementation='com.pack.serviceWS3Impl'
		url-pattern='/WS3' wsdl="WEB-INF/wsdl/WS3.wsdl" />
	<!-- -->
	<!-- -->
	<!-- -->
</endpoints>[/XML]


hier eine implementierter WS

```
@WebService(serviceName = "WS1", portName = "WS1SOAP", targetNamespace = "http://test.net/Pack2/ws/Service", endpointInterface = "net.test.pack2.ws.service.WS1")
public class WS1Impl implements WS1{

	@Override
	public String echo(String in) {
		// TODO Auto-generated method stub
		return "Webservice1 echo: " + in;
	}

	@Override
	public DatenTyp getDaten(net.test.ws.schema.Aufruf aufruf) {
		// TODO Auto-generated method stub
		return null;
	}


}
```

der vollständig halber eine der WSDL:
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://test.net/ws/Service"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	name="WS1" 
	targetNamespace="http://test.net/WS/Service">
	<wsdl:types>
		<xsd:schema targetNamespace="http://test.net/WS/Service"
			xmlns:Q2="http://test.net/WS/Schema">
            <xsd:import schemaLocation="WS1.xsd" namespace="http://test.net/WS/Schema"></xsd:import>

			<xsd:element name="echo">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="in" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="echoResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="out" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="getDaten" type="Q2:aufruf">
			</xsd:element>
			<xsd:element name="getResponse"
				type="Q2:daten">
			</xsd:element>
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="echoRequest">
		<wsdlart element="tns:echo" name="StringToEcho" />
	</wsdl:message>
	<wsdl:message name="echoResponse">
		<wsdlart element="tns:echoResponse" name="EchoString" />
	</wsdl:message>
	<wsdl:message name="getDatenRequest">
		<wsdlart name="aufruf" element="tns:getDaten"></wsdlart>
	</wsdl:message>
	<wsdl:message name="getDatenResponse">
		<wsdlart name="stammdaten" element="tns:getDatenResponse"></wsdlart>
	</wsdl:message>
	<wsdlortType name="WS1">
		<wsdlperation name="echo">
			<wsdl:input message="tns:echoRequest" />
			<wsdlutput message="tns:echoResponse" />
		</wsdlperation>
		<wsdlperation name="getDaten">
			<wsdl:input message="tns:getDatenRequest"></wsdl:input>
			<wsdlutput message="tns:getDatenResponse"></wsdlutput>
		</wsdlperation>
	</wsdlortType>
	<wsdl:binding name="WS1SOAP"
		type="tns:WS1">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdlperation name="echo">
			<soapperation
				soapAction="http://test.net/ws/Service/echo" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdlutput>
				<soap:body use="literal" />
			</wsdlutput>
		</wsdlperation>
		<wsdlperation name="getDaten">
			<soapperation
				soapAction="http://test.net/ws/Service/getDaten" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdlutput>
				<soap:body use="literal" />
			</wsdlutput>
		</wsdlperation>
	</wsdl:binding>

	<wsdl:service name="WS">
		<wsdlort binding="tns:WS1SOAP" name="WS1SOAP">
			<soap:address location="http://localhost:8080/ws" />
		</wsdlort>
	</wsdl:service>
</wsdl:definitions>

[/XML]


----------



## DerFeivel (22. Jun 2012)

Ich hab jetzt hier gerade keinen Glassfish zur Hand, aber ich bin mir sicher, dass du dir die _sun-jaxws.xml_ kannst du dir sparen kannst. sun-jaxws.xml ist ein metrospezifischer Deskriptor der bei JSR-109 compliant Containern (wie Glassfish einer ist) nicht mehr nötig ist.


Stattdessen sollte es so auch gehen:

Implementierungsklasse

```
package com.pack.service;

@WebService(serviceName = "WS1", 
                   portName = "WS1SOAP", 
                   targetNamespace = "http://test.net/Pack2/ws/Service", 
                   endpointInterface = "net.test.pack2.ws.service.WS1")
public class WS1Impl implements WS1{
 
    @Override
    public String echo(String in) {
        // TODO Auto-generated method stub
        return "Webservice1 echo: " + in;
    }
 
    @Override
    public DatenTyp getDaten(net.test.ws.schema.Aufruf aufruf) {
        // TODO Auto-generated method stub
        return null;
    }
 
}
```

web.xml
[XML]
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <display-name>Mein Webservice</display-name>

    <servlet>
        <servlet-name>WS1JaxWsServlet</servlet-name>
        <servlet-class>com.pack.service.WS1Impl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>WS1JaxWsServlet</servlet-name>
        <url-pattern>/WS1</url-pattern>
    </servlet-mapping>

</web-app>[/XML]

Steht im targetNamespace-Attribut deiner Webservice-Implementierung eigentlich derselbe targetNamespace wie im WS1-Interface?


----------



## Nud3l (22. Jun 2012)

Also mein Hauptproblem ist nicht das mein Webservice nicht funktioniert. Ich möchte eigentlich den Webservice mitteilen, dass es meine WSDL benutzen soll und sich keinen aus den generierten Klassen zusammen setzen soll.

Daher auch die Einträge in der sunjaxws.xml.


----------



## DerFeivel (25. Jun 2012)

Das habe ich auch nicht gedacht. Die sun-jaxws und ein paar der Einträge in der web.xml sind auf einem AppServer der jaxws unterstützt nicht notwendig. Mit meinem Hinweis wollte ich nur dir Anzahl der möglichen fehlerstellen minimieren (du konfigurierst ja deinen ws einmal über annotationen und einmal über xml...)


----------



## Nud3l (27. Jun 2012)

Ich habe jetzt versucht die wsdlLocation manuell über die Annotation zu definieren.

ich habe folgendes ausprobiert.


```
wsdlLocation  = "C:\\Projekte\\Eclipse\\workspace\\Test\\src\\main\\webapp\\WEB-INF\\wsdl\\WS1.wsdl"
wsdlLocation  = "src\\main\\webapp\\WEB-INF\\wsdl\\WS1.wsdl"
```

Aber sobald ich da was angegeben habe konnte das gebaute war-File nicht mehr deployed werden. Was ist dadran denn falsch?


----------



## DerFeivel (28. Jun 2012)

Versuchs mal mit "WEB-INF\\wsdl\\WS1.wsdl". Er sucht ja in der war


----------



## Nud3l (29. Jun 2012)

Nach etwas rum probieren hat es nun schlisslich geklappt mit 



```
@WebService(serviceName = "WS1", 
                   portName = "WS1SOAP", 
wsdlLocation  = "WS1.wsdl"
                   targetNamespace = "http://test.net/Pack2/ws/Service", 
                   endpointInterface = "net.test.pack2.ws.service.WS1")
```


----------

