Ich habe einen JAX-RPC-Webdienst, den ich versuche, mit Spring zu konsumieren. Dies ist das erste Mal, dass ich Spring verwende, um einen Webdienst zu konsumieren, also versuche ich im Moment nur, ihn testweise in den JAX-RPC-Webdienst zu integrieren.
Der Webdienst umfasst mehrere Dutzend Operationen, aber im Moment interessiert mich nur eine. Hier sind die Schnittstellen, die ich auf der Spring/Client-Seite erstellt habe:
public interface WSClient {
public boolean userExists(int userid);
}
public interface WSService {
//this method matches the method signature of the Web Service
public com.company.data.User getUser(int userid);
}
Und hier ist meine applicationContext.xml:
<bean id="WSClient" class="com.company.ws.test.WSClientImpl">
<property name="service" ref="myWebService"></property>
</bean>
<bean id="myWebService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<property name="serviceInterface" value="com.company.ws.test.WSService"/>
<property name="endpointAddress" value="http://1.2.3.4/web-service/data"/>
<property name="namespaceUri" value="http://www.company.com/wdsl"/>
<property name="serviceName" value="CompanyWebService"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
<property name="maintainSession" value="true"/>
</bean>
Mit dieser Konfiguration von JaxRpcPortProxyFactoryBean
gibt der Aufruf des Dienstes die folgende Ausnahme zurück:
org.springframework.remoting.RemoteProxyFailureException: Ungültige JAX-RPC-Aufrufkonfiguration; verschachtelte Ausnahme ist Operation Style: "rpc" nicht unterstützt
Ich habe den Unterschied zwischen RPC- und dokumentenbasierten Webdiensten nie ganz verstanden; ich glaube jedoch, dass dieser Webdienst den RPC-Stil verwendet - daher verwirrt mich diese Ausnahme.
Zweitens, ich bin verwirrt, welche Eigenschaften ich mit JaxRpcPortProxyFactoryBean
:
- Wenn ich die
wsdlDocumentUrl
Eigenschaft, erhalte ich am Ende einen HTTP 401-Fehler, da dieser Webdienst hinter HTTP Basic Authentication sitzt und es scheint, dass Spring die Eigenschaften Benutzername/Passwort beim Abrufen der WSDL nicht verwendet. -
Wenn ich eine
PortInterface
Eigenschaft (mit einem Wert vonCompanyWebServiceInterfacePort
), dann erhalte ich eine andere Exception, die besagt:Dienst für JAX-RPC-Port konnte nicht initialisiert werden [{ http://www.company.com/wdsl }CompanyWebServiceInterfacePort]; verschachtelte Ausnahme: WSDL-Daten fehlen, dieser Vorgang ist nicht verfügbar
Mit anderen Worten, es sagt mir, dass die WSDL fehlt - die ich nicht einstellen kann, da Spring nicht den Benutzernamen/Passwort verwenden wird, um es vom Server zu holen!
Ich bin mir nicht sicher, ob das alles einen Sinn ergibt, aber im Grunde genommen bin ich mir unsicher:
- Muss ich für einen JAX-RPC-Dienst die Eigenschaft PortInterface festlegen? Ist dies der Weg, den ich einschlagen sollte?
- Ähnlich, braucht Spring mich, um die
wsdlDocumentUrl
Eigentum? Wenn ja, gibt es eine Möglichkeit, Spring die WSDL mitzuteilen und das Authentifizierungsproblem zu umgehen?