Webservice Einbinden wsdl

Nud3l

Gesperrter Benutzer
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
 
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
Java:
@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">
<wsdl😛art element="tns:echo" name="StringToEcho" />
</wsdl:message>
<wsdl:message name="echoResponse">
<wsdl😛art element="tns:echoResponse" name="EchoString" />
</wsdl:message>
<wsdl:message name="getDatenRequest">
<wsdl😛art name="aufruf" element="tns:getDaten"></wsdl😛art>
</wsdl:message>
<wsdl:message name="getDatenResponse">
<wsdl😛art name="stammdaten" element="tns:getDatenResponse"></wsdl😛art>
</wsdl:message>
<wsdl😛ortType name="WS1">
<wsdl😱peration name="echo">
<wsdl:input message="tns:echoRequest" />
<wsdl😱utput message="tns:echoResponse" />
</wsdl😱peration>
<wsdl😱peration name="getDaten">
<wsdl:input message="tns:getDatenRequest"></wsdl:input>
<wsdl😱utput message="tns:getDatenResponse"></wsdl😱utput>
</wsdl😱peration>
</wsdl😛ortType>
<wsdl:binding name="WS1SOAP"
type="tns:WS1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl😱peration name="echo">
<soap😱peration
soapAction="http://test.net/ws/Service/echo" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl😱utput>
<soap:body use="literal" />
</wsdl😱utput>
</wsdl😱peration>
<wsdl😱peration name="getDaten">
<soap😱peration
soapAction="http://test.net/ws/Service/getDaten" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl😱utput>
<soap:body use="literal" />
</wsdl😱utput>
</wsdl😱peration>
</wsdl:binding>

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

[/XML]
 
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
Java:
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?
 
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.
 
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...)
 
Ich habe jetzt versucht die wsdlLocation manuell über die Annotation zu definieren.

ich habe folgendes ausprobiert.

Java:
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?
 
Nach etwas rum probieren hat es nun schlisslich geklappt mit


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

Zurück
Oben