Avatar billede ignatius Nybegynder
09. maj 2005 - 15:43 Der er 22 kommentarer og
1 løsning

Problemer med at overføre parametre til en dot net webservice

Jeg har lavet en klient til en webservice med Apache SOAP
Webservicen bliver kaldt og jeg får et svar tilbage, men returværdien er afhængigaf tre parametre (som ikke kommer med/ikke bliver modtaget), så mit spørgsmål er hvordan jeg får parametrene med/får dem til at blive modtaget, har det noget med encoding at gøre.
mit response er :
[Header=null] [methodName=myMethod] [targetObjectURI=http://localhost/webservice/] [encodingStyleURI=null] [SOAPContext=[Parts={[cid:null type: text/xml; charset=utf-8 enc: null]}]] [return=[name=myMethodResult] [type=class java.lang.String] [value=<LableService><LabelData>Hello (, , )</LabelData></LableService>
] [encodingStyleURI=null]]
[Params={}]

Den encoding den er sat til er:
call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/");
Avatar billede arne_v Ekspert
09. maj 2005 - 16:32 #1
Nogen bestemt grund til at du bruger det gamle Apache SOAP og ikke Apache Axis ?
Avatar billede ignatius Nybegynder
10. maj 2005 - 10:26 #2
Nej, det er der egentligt ikke, jeg fandt bare et eksempel på Apache SOAP, der svarede til det jeg skulle bruge, men det duede så ikke med parametrene. Hvis du kan hjælpe mig med Axis, ville det også være fint.
Avatar billede arne_v Ekspert
10. maj 2005 - 10:38 #3
Axis er nyere og vi plejer at kunne få det til at virke sammen med .NET
Avatar billede ignatius Nybegynder
10. maj 2005 - 10:50 #4
har du et eksempel?
Avatar billede arne_v Ekspert
10. maj 2005 - 10:56 #5
Avatar billede ignatius Nybegynder
10. maj 2005 - 11:32 #6
Jeg har lavet denne, men den siger at den ikke kan genkende SOAPAction(se nederst)
import javax.xml.namespace.QName;


import org.apache.axis.client.Call;


import javax.xml.rpc.ServiceFactory;
import org.apache.axis.client.Service;

public class axis_1 {

  public static void main(String[] args) {

    try {

      String endpoint = "http://localhost/WDXLabelService/LabelRequest.asmx";

      Service service = new Service();
     

      Call call = (Call) service.createCall();
     
      call.setOperationName(new QName(endpoint, "getLabel"));
      call.setSOAPActionURI("http://widexwus10/WDXLabelService/getLabelRequest");
      call.setTargetEndpointAddress(new java.net.URL(endpoint));
     
      String ret = (String) call.invoke(new Object[] {"one","two","tree"});

      System.out.println(ret);

    } catch (Exception e) {

      System.err.println("Execution failed. Exception: " + e);
      e.printStackTrace();

    }
    //System.out.println("her"+callService());

  }
}
Execution failed. Exception: Server did not recognize the value of HTTP Header SOAPAction: http://localhost/WDXLabelService/getLabelRequest.
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode:
faultString: Server did not recognize the value of HTTP Header SOAPAction: http://localhost/WDXLabelService/getLabelRequest.
faultActor:
faultNode:
faultDetail:
        {http://xml.apache.org/axis/}stackTrace:Server did not recognize the value of HTTP Header SOAPAction: http://localhost/WDXLabelService/getLabelRequest.
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:424)
        at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2765)
        at org.apache.axis.client.Call.invoke(Call.java:2748)
        at org.apache.axis.client.Call.invoke(Call.java:2424)
        at org.apache.axis.client.Call.invoke(Call.java:2347)
        at org.apache.axis.client.Call.invoke(Call.java:1804)
        at axis_1.main(axis_1.java:27)

        {http://xml.apache.org/axis/}hostname:XXX

Server did not recognize the value of HTTP Header SOAPAction: http://localhost/WDXLabelService/getLabelRequest.
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:424)
        at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2765)
        at org.apache.axis.client.Call.invoke(Call.java:2748)
        at org.apache.axis.client.Call.invoke(Call.java:2424)
        at org.apache.axis.client.Call.invoke(Call.java:2347)
        at org.apache.axis.client.Call.invoke(Call.java:1804)
        at axis_1.main(axis_1.java:27)
Avatar billede ignatius Nybegynder
10. maj 2005 - 12:53 #7
Ups, havde forkert actionURI, den virker nu, bortset fra parametrene, som stadig ikke bliver overført.
Avatar billede arne_v Ekspert
10. maj 2005 - 19:37 #8
må vi se fejl teksten ?

og invoke kaldet som det ser ud nu ?

samt evt. WSDL filen ?
Avatar billede ignatius Nybegynder
11. maj 2005 - 08:51 #9
Her kommer så wsdl filen og min klasse:

  <?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://widexwus10/WDXLabelService/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://widexwus10/WDXLabelService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://widexwus10/WDXLabelService/">
- <s:element name="getLabel">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="itemId" type="s:string" />
  <s:element minOccurs="0" maxOccurs="1" name="qty" type="s:string" />
  <s:element minOccurs="0" maxOccurs="1" name="serialNo" type="s:string" />
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="getLabelResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="getLabelResult" type="s:string" />
  </s:sequence>
  </s:complexType>
  </s:element>
  </s:schema>
  </wsdl:types>
- <wsdl:message name="getLabelSoapIn">
  <wsdl:part name="parameters" element="tns:getLabel" />
  </wsdl:message>
- <wsdl:message name="getLabelSoapOut">
  <wsdl:part name="parameters" element="tns:getLabelResponse" />
  </wsdl:message>
- <wsdl:portType name="Label_x0020_ServiceSoap">
- <wsdl:operation name="getLabel">
  <wsdl:input message="tns:getLabelSoapIn" />
  <wsdl:output message="tns:getLabelSoapOut" />
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="Label_x0020_ServiceSoap" type="tns:Label_x0020_ServiceSoap">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <wsdl:operation name="getLabel">
  <soap:operation soapAction="http://widexwus10/WDXLabelService/getLabel" style="document" />
- <wsdl:input>
  <soap:body use="literal" />
  </wsdl:input>
- <wsdl:output>
  <soap:body use="literal" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="Label_x0020_Service">
  <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Axapta labels.</documentation>
- <wsdl:port name="Label_x0020_ServiceSoap" binding="tns:Label_x0020_ServiceSoap">
  <soap:address location="http://widexwus10/WDXLabelService/LabelRequest.asmx" />
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

OG MIN JAVAKLASSE:

mport javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import javax.xml.rpc.ServiceFactory;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class axis_1 {
   
    public static void main(String[] args) {
       
        try {
            String endpoint = "http://widexwus10/WDXLabelService/LabelRequest.asmx";
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setOperationName(new QName(endpoint, "getLabel"));
            call.setSOAPActionURI("http://widexwus10/WDXLabelService/getLabel");
            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.addParameter("itemId",XMLType.XSD_STRING,ParameterMode.IN);
            call.addParameter("qty",XMLType.XSD_STRING,ParameterMode.IN);
            call.addParameter("serialNo",XMLType.XSD_STRING,ParameterMode.IN);
            call.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
            call.setReturnType(XMLType.XSD_STRING);
            String ret = (String) call.invoke(new Object[]{"1234","2345","5566"});
            System.out.println(ret);
        } catch (Exception e) {
            System.err.println("Execution failed. Exception: " + e);
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
11. maj 2005 - 09:07 #10
De parametre ser helt forkerte ud i forhold til wsdl'en.

Prøv at lade Axis generere en stub og kig lidt på den.
Avatar billede ignatius Nybegynder
11. maj 2005 - 09:08 #11
Hvordan gør man det?
Avatar billede arne_v Ekspert
11. maj 2005 - 09:11 #12
Det er beskrevet i min Axis artikel.
Avatar billede arne_v Ekspert
11. maj 2005 - 09:12 #13
http://www.eksperten.dk/artikler/159

(det er lidt nemmer hvis man builder med ant men ...)
Avatar billede ignatius Nybegynder
11. maj 2005 - 09:35 #14
Når jeg gør det får jeg følgende fejl.
Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.commons.logging.LogFactory
        at org.apache.axis.components.logger.LogFactory.class$(LogFactory.java:45)
        at org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:45)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
        at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
        at org.apache.axis.i18n.ProjectResourceBundle.<clinit>(ProjectResourceBundle.java:53)
        at org.apache.axis.i18n.MessagesConstants.<clinit>(MessagesConstants.java:32)
        at org.apache.axis.utils.Messages.<clinit>(Messages.java:36)
        at org.apache.axis.wsdl.WSDL2Java.<clinit>(WSDL2Java.java:112)
Avatar billede arne_v Ekspert
11. maj 2005 - 10:16 #15
du skal have alle jar filerne i classpath
Avatar billede ignatius Nybegynder
11. maj 2005 - 10:29 #16
Filerne i min classpath er:
C:\Program files\Java\jre1.5.0_03\bin;
C:\__a\axis-1_2\lib\axis.jar;
C:\__a\axis-1_2\lib\axis-ant.jar;
C:\__a\axis-1_2\lib\commons-discovery-2.0.jar;
C:\__a\axis-1_2\lib\commons-logging-1.0.4.jar;
C:\__a\axis-1_2\lib\jaxrpc.jar;
C:\__a\axis-1_2\lib\log4j-1.2.8.jar;
C:\__a\axis-1_2\lib\saaj.jar;
C:\__a\axis-1_2\lib\wsdl4j-1.5.1.jar
Avatar billede ignatius Nybegynder
11. maj 2005 - 11:02 #17
Er det ikke de rigtige filer?
Avatar billede arne_v Ekspert
11. maj 2005 - 12:54 #18
de ser rigtige ud

org.apache.commons.logging.LogFactory ligger i commons-logging-1.0.4.jar

men jeg kan prøve at processe din WSDL fil

senere idag når jeg er kommet hjem fra arbejde
Avatar billede ignatius Nybegynder
11. maj 2005 - 13:14 #19
Jeg fik genereret min Stub og min klasse, så nu virker det.

Tak for hjælpen!

Kan du lave et svar så du kan få dine points

Mvh
Ignatius
Avatar billede arne_v Ekspert
11. maj 2005 - 13:32 #20
svar
Avatar billede arne_v Ekspert
11. maj 2005 - 13:33 #21
Jeg kan iøvrigt klart anbefale at bruge den genererede stub. Det gør det 100 gange
nemmere at kode client'en.
Avatar billede ignatius Nybegynder
11. maj 2005 - 14:01 #22
Det har jeg også tænkt mig at gøre, så er det jo bare et par linier kode der skal laves.
Avatar billede arne_v Ekspert
11. maj 2005 - 18:41 #23
nemlig

web services kan være nemt !
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
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

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