Połączenie cxf + spring + typy generyczne

0

Cześć. Mam coś takiego:

public class Klasa<T>  { T object;..}
@WebService
public interface ITest {
   public Klasa<String> test();
}

implementacja

public Klasa<String> test() {
	String str = new String("ala");
	return new Klasa<String>(str);
}

Po stronie klienta:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
		"pl/aaa/ws/client-beans.xml");
ITest t = (ITest ) context.getBean("test");
Klasa<String> p = t.test();

i tutaj pojawia się problem z wartością null podczas pobierania wartości object. Jeżeli do klasy Klasa dodam String innePole to zostanie ono prawidłowo odebrane.

Czy ktoś wie w czym problem?

CXF 2.5.2, Spring 3

0

Przepraszam ale gdzie cokolwiek w tym co wkleiłeś coś robisz z tym objectem? Bo może ja jestem ślepy albo głupi ale w ogóle nie rozumiem o co ci chodzi. Możesz łaskawie pokazać konkretny kod z którym masz problem?

0
Shalom napisał(a)

Przepraszam ale gdzie cokolwiek w tym co wkleiłeś coś robisz z tym objectem? Bo może ja jestem ślepy albo głupi ale w ogóle nie rozumiem o co ci chodzi. Możesz łaskawie pokazać konkretny kod z którym masz problem?

Sądziłem, że zrozumiałe jest istnienie konstruktora i gettera w klasie Klasa, więc

public class Klasa<T>  {
 private T object;
 public Klasa(T object) {
   this.object = object;
 }
 public T getObject() {
   return object;
 }
}
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "pl/aaa/ws/client-beans.xml");
ITest t = (ITest ) context.getBean("test");
Klasa<String> p = t.test();

i tutaj p.getObject() zwraca null

0

A czy to property jest jakoś inicjalizowane w takim razie? Może po prostu masz błąd przy wstrzykiwaniu czegoś tutaj? Mam sie domyślać co w tym swoim client-beans.xml napisałeś?

0
Shalom napisał(a)

A czy to property jest jakoś inicjalizowane w takim razie? Może po prostu masz błąd przy wstrzykiwaniu czegoś tutaj? Mam sie domyślać co w tym swoim client-beans.xml napisałeś?

Dla zwykłych typów działa.

Serwer:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:endpoint id="test" implementor="pl.aaa.ws.TestImpl"
		address="/test" />
</beans>

Klient:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
	<jaxws:client id="test" serviceClass="pl.aaa.ws.ITest" address="http://127.0.0.1:8888/test-ws/test" >
	</jaxws:client>
</beans>
0

Dość dziwne bo wygląda że powinno działać. Google też milczy na temat jakichś problemów z genericami w takiej sytuacji.

0

A dodałeś do tej klasy, że implementuje interfejs? Ja tu nie widzę. Jakim sposobem ma Ci użyć tej metody test() skoro NIE MA jej zaimplementowanej.

public class Klasa<T> implements ITest{
}

0

Dzięki za zainteresowanie. Udało się rozwiązać problem. Jak mniemam winny był maven, bo po ponownym pobraniu zależności działa jak należy.

0

Moze coś się źle zbudowało, tak czasem bywa :) Ale dobrze że działa, bo już zaczynałem wątpić w Springa :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1