axis 클라이언트 호출.NET(axmx) 서버

4074 단어
코드:
private boolean connect(String namespace, String endpoint, String function) {
		try {
			//  WS 
			call = (Call) service.createCall();
			//  
			call.setOperationName(new QName(namespace, function));
			//  
			call.setTargetEndpointAddress(endpoint);
		} catch (ServiceException ex) {
			LOG.error(" (" + endpoint + ") ", ex);
			return false;
		}
		return true;
	}
public boolean dmisQuery(String endpoint, String namespace, String function, String start,
			String until,String GID) {
		//LOG.info(" :" + endpoint + ",  :" + function + ", " + " :" + sender);
		//  
		if (!connect(namespace, endpoint, function))
			return false;
		
		
		boolean result = false;

		try {
			Object data = call.invoke(new Object[] {GID,start,until});
			
			//  
			String source = new String(Base64.decode((String) data));
			LOG.info(" :" + (String) data);
			//Response response = unmarshal(source);
			//LOG.info(" :" + response.getStatus());
//		} catch (JAXBException ex) {
//			LOG.error(" XML ", ex);
		} catch (RemoteException ex) {
			LOG.error(" (" + endpoint + ") ", ex);
		}
		
		return result;
	}

public static void main(String[] args){
  impl.dmisQuery("http://10.50.11.190/MWWebSite/ProjectHome/WebService/WebSer_TY_GJ.asmx", "http://tempuri.org/", "GetData", "2012-08-01 00:00:00", "2012-08-01 00:00:00","");
}


위의 주소를 주의하세요http://10.50.11.190/MWWebSite/ProjectHome/WebService/WebSer_TY_GJ.asmx접두사는'asmx'입니다. 이 주소가 대표하는 서버는 다음과 같습니다.NET 아키텍처의
오류 보고:

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
 faultSubcode: 
 faultString: System.Web.Services.Protocols.SoapException:   HTTP   SOAPAction  : 。
     System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
     System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
     System.Web.Services.Protocols.SoapServerProtocol.Initialize()
     System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

해결 방법:
connect 방법을 수정합니다.NET 웹 서비스 서버, axis 클라이언트 호출 시 추가
call.setSOAPActionURI(namespace+function);

수정하면 다음과 같습니다.

private boolean connect(String namespace, String endpoint, String function) {
		try {
			//  WS 
			call = (Call) service.createCall();
			//  
			call.setOperationName(new QName(namespace, function));
			//  
			call.setTargetEndpointAddress(endpoint);
                           

/****************** .NET webservice *******************/
call.addParameter(new QName("http://tempuri.org/","GID"), 
                org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		call.addParameter(new QName("http://tempuri.org/","start"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		call.addParameter(new QName("http://tempuri.org/","until"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

		 call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); 
		
		call.setUseSOAPAction(true);
		
		call.setSOAPActionURI("http://tempuri.org/GetData");
/****************** .NET webservice *******************/		
		} catch (ServiceException ex) {
			LOG.error(" (" + endpoint + ") ", ex);
			return false;
		}
		return true;
	}


좋은 웹페이지 즐겨찾기