Avatar billede hacked Nybegynder
27. september 2005 - 18:01 Der er 11 kommentarer og
1 løsning

Jdeveloper - Web Service Metadata Annotation

Hej - Findes der en metadata annontation der fortæller oc4j at den fx. bare skal hoppe over en given metode i et objekt?
Eller er der en anden måde der løser problemet?
Mit problem er setTableMap() og getTableMap (TableMap er ikke beskrevet i WSDL filen.) - hvis disse ikke bliver udkommenteret får jeg følgende fejl:

05/09/27 17:54:16 java.lang.IllegalArgumentException: No Serializer found to serialize a 'mypackage.Product' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.

05/09/27 17:54:16     at org.apache.soap.util.xml.XMLJavaMappingRegistry.querySerializer(XMLJavaMappingRegistry.java)

05/09/27 17:54:16     at org.apache.soap.encoding.soapenc.ParameterSerializer.marshall(ParameterSerializer.java:106)

05/09/27 17:54:16     at org.apache.soap.rpc.RPCMessage.marshall(RPCMessage.java:265)

05/09/27 17:54:16     at org.apache.soap.Body.marshall(Body.java:148)

05/09/27 17:54:16     at org.apache.soap.Envelope.marshall(Envelope.java:203)

05/09/27 17:54:16     at org.apache.soap.Envelope.marshall(Envelope.java:162)

05/09/27 17:54:16     at oracle.j2ee.ws.InvocationWrapper.invoke(InvocationWrapper.java:451)

05/09/27 17:54:16     at oracle.j2ee.ws.RpcWebService.doGetRequest(RpcWebService.java:642)

05/09/27 17:54:16     at oracle.j2ee.ws.BaseWebService.doGet(BaseWebService.java:1173)

05/09/27 17:54:16     at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

05/09/27 17:54:16     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

05/09/27 17:54:16     at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)

05/09/27 17:54:16     at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source)

05/09/27 17:54:16     at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:649)

05/09/27 17:54:16     at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:322)

05/09/27 17:54:16     at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)

05/09/27 17:54:16     at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)

05/09/27 17:54:16     at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)

05/09/27 17:54:16     at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)

05/09/27 17:54:16     at java.lang.Thread.run(Thread.java:534)

Kode:

public class DomainObject
{
  protected TableMap tableMap;
 
  public DomainObject()
  {
  }
 
  /*
  public void setTableMap(TableMap tableMap)
  {
    this.tableMap = tableMap;
  }
  */
 
  /*
  public TableMap getTableMap()
  {
    return this.tableMap;
  }
  */
}

public class Person extends DomainObject
{
  private long id;

  public Person()
  {
    tableMap = new TableMap("PERSON");
    tableMap.addColumn("ID","LONG");
  }
 
  public void setID(long id)
  {
    this.id = id;
  }
 
  public long getID()
  {
    return this.id;
  }
}

public class TableMap
{
  private ArrayList columnMap;
  private String tableName;
 
  public TableMap(String tableName)
  {
    this.tableName = tableName;
    columnMap = new ArrayList();
  }
 
  public ArrayList getColumnMap()
  {
    return this.columnMap;
  }
 
  public String getTableName()
  {
    return this.tableName;
  }
 
  public void addColumn(String columnName, String type)
  {
    columnMap.add(new Column(columnName,type));
  }
}

public class Column
{
  private String columnName;
  private String type;
 
  public Column(String columnName, String type)
  {
    this.columnName = columnName;
    this.type = type;
  }
 
  public String getName()
  {
    return this.columnName;
  }
 
  public void setName(String columnName)
  {
    this.columnName = columnName;
  }
 
  public void getType()
  {
    return this.type;
  }
 
  public void setType(String type)
  {
    this.type = type;
  }
}

public class WebService
{
  public WebService()
  {
  }
 
  /**
  *
  * @webmethod
  */
  public Product getProducts()
  {
    Product p = new Product();
    p.setName("Dolph");
    return p;
  }
}
Avatar billede kalp Novice
27. september 2005 - 18:03 #1
ved ikke om det kan have noget med det, at gøre, men er klassen Product serializerbar?
Avatar billede hacked Nybegynder
27. september 2005 - 18:04 #2
woops - mindre fejl - p.setID(1000) istedet for p.setName....
Avatar billede hacked Nybegynder
27. september 2005 - 18:06 #3
Det er den hvis jeg fjerner setTableMap() og getTableMap() - så får jeg ingen fejl.
Avatar billede hacked Nybegynder
27. september 2005 - 18:18 #4
public String getType()
{
  return this.type;
}

Istedet for:

public void getType()
{
  return this.type;
}
Avatar billede hacked Nybegynder
27. september 2005 - 18:20 #5
public Person getProducts()
{
    Person p = new Person();
    p.setID(1000);
    return p;
}

Istedet for:

public Product getProducts()
  {
    Product p = new Product();
    p.setName("Dolph");
    return p;
  }
Avatar billede hacked Nybegynder
27. september 2005 - 18:22 #6
Skrev lige hurtigt et forsimplet eksempel - så undskyld rettelserne.
Avatar billede kalp Novice
27. september 2005 - 18:26 #7
Avatar billede hacked Nybegynder
27. september 2005 - 20:17 #8
Ja.... - muligvis. Har set lidt på det - men så vidt jeg kan se er det hvis man har en webservice metode der returnere en type der ikke er tilgængelig i soap schemaet man benytter. Det er ArrayListen i TableMap der skaber problemerne - der er ingen standard for en ArrayList. Men eftersom Personklassen benytter TableMap så bliver alle public metoder i TableMap også kørt igennem af OC4J. Anyway -
jeg løste det ved at gøre metoderne protected. Ved godt det sætter nogle begrænsninger men da metoderne kun skal benyttes i det samme bibliotek går det nok.
Avatar billede arne_v Ekspert
27. september 2005 - 21:50 #9
de fields som ikke har public get og set metode bliver formentlig ikke sendt
med i web service kaldet så !

er det hvad du ønsker ?
Avatar billede hacked Nybegynder
27. september 2005 - 22:33 #10
Nej - jeg ønsker netop at de ikke bliver sendt med og mest af alt ikke valideret såsnart kaldet går igennem og personobjektet bliver instantieret og sendt tilbage til klienten. Hvis du har en anden løsning end at gøre dem protected så lytter jeg gerne for den løsning er ikke super optimal.
Avatar billede hacked Nybegynder
27. september 2005 - 22:43 #11
Hov - og det korrekte svar ville være: Ja det er hvad jeg ønsker. De skal ikke blive sendt med. Misforstod din formulering.
Avatar billede hacked Nybegynder
03. december 2005 - 00:52 #12
løste det selv - tager point ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester