当SoapUI可以

时间:2015-05-19 19:34:16

标签: java web-services wsdl bpel

我遇到了以下错误,经过对此问题的广泛研究以及一些类似的问题,似乎没有任何帮助。

我的错误:

    com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
    at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:121)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:142)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
    at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
    at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
    at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    at com.sun.proxy.$Proxy33.onboardPerson(Unknown Source)
    at com.paychex.corp.fileloader.FileloaderMain.callWebService(FileloaderMain.java:202)
    at com.paychex.corp.fileloader.FileloaderMain.main(FileloaderMain.java:104)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:208)
    at sun.net.www.http.HttpClient.New(HttpClient.java:291)
    at sun.net.www.http.HttpClient.New(HttpClient.java:310)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:966)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1031)
    at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:109)

我的客户端是使用从活动服务可见的WSDL文件从wsimport生成的。代码连接示例:URL和服务名称等是正确的,无法列出安全性

URL url = new URL("http://correctserviceurl?WSDL");
        QName qname = new QName("http://correct servicelocation","nameofService");
        CorporateEmployeeOnboardingService service = new CorporateEmployeeOnboardingService(url, qname);

        //CorporateEmployeeOnboardingService service = new CorporateEmployeeOnboardingService();
        CorporateEmployeeOnboardingProcess process = service.getICorporateEmployeeOnboardingProcess();
        OnboardRequestType onboardRequest = new OnboardRequestType();

/**
         * TESTING SECTION FOR PROCESS CALL
         */
        //create necessary complex types:
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        DatatypeFactory datatypeFactory;
        datatypeFactory = DatatypeFactory.newInstance();
        XMLGregorianCalendar testDate = 
            datatypeFactory.newXMLGregorianCalendar(gregorianCalendar);
        testDate.setYear(1991);
        testDate.setMonth(4);
        testDate.setDay(3);
        AssignmentComplexType testAssignment = new AssignmentComplexType();
        testAssignment.setHiringManagerID("123445");
        //set person to send
        person.setSSN("333-33-3333");
        person.setFirstName("testFname");
        person.setLastName("testLname");
        person.setDOB(testDate);
        person.setHireDate(testDate);
        person.setAssignment(testAssignment);
        /**
         * end testing section of the person creation
         */
        onboardRequest.getPerson().add(person);//add a person to the array of people for the request
    ServiceResponse response = process.onboardPerson(onboardRequest);

如上所述,SoapUI可以发送相同的测试信息,并从服务中获得完全有效的请求。所有信息都一样。我一直在挖掘并确认没有代理,两者都是相同的位(32/64,在这种情况下都是32),服务名称和WSDL是正确的,对象命名正确,等等。我做了进一步的调试尝试绕过这个看似没有可用信息的可怕错误代码,并使用wireshark将SoapUI请求与java请求进行比较,发现SoapUI正在使用POST,而java客户端正在使用GET,我现在正依靠这个作为源代码通用拒绝连接错误。

该服务使用BPEL运行并使用BPEL创建,因此基本上生成了所有代码。我现在会看看Get / post find,但是我想把它弄到那里,因为我怀疑它可能是原因。

非常感谢任何帮助。如果我忘记了可以分享的任何关键信息,请告诉我。

修改

我想补充一点,我可以从我用来尝试连接到BPEL服务的计算机访问Web浏览器中的端点URL。似乎问题完全在于我使用wsimport为服务的WSDL生成的WSDL存​​根生成的客户端。

编辑2:发展/进展

问题似乎是客户端即使在将qname设置为正确的地址后也将响应发送到本地主机。我现在正试图弄清楚这个本地主机的设置位置。关于这一发展的任何想法都将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

已经有一段时间了,但我相信这句话:your_new_server_jenkins_home/*

需要阅读:URL url = new URL("http://correctserviceurl?WSDL");

答案 1 :(得分:0)

ķ!我认为这是BPEL的一个问题。相当令人沮丧。显然,在按以下几行初始化服务之后:

URL url = new URL("http://serviceaddresshere?WSDL");
        QName qname = new QName("http://servicelocationaddress","NameOfService");
        CorporateEmployeeOnboardingService service = new CorporateEmployeeOnboardingService(url, qname);

        CorporateEmployeeOnboardingProcess process = service.getICorporateEmployeeOnboardingProcess();

BPEL使用服务WSDL和CORRECT地址获取请求。但是,BPEL似乎认为“O?你想要这个服务,在这里你我会告诉你,只有你想要的WSDL是包装器,所以这里是真正的WSDL。”用简单的英语,您可以获得它认为是服务的BPEL WSDL,并且其中包含Localhost地址。现在我尝试通过错误向上更改此WSDL中的地址但更改了BPEL。所以解决方法是在流程变量为make之后添加这一行:(AKA THE FIX)

((BindingProvider) process).getRequestContext().put(Dispatch.ENDPOINT_ADDRESS_PROPERTY, "http://the serviceaddress");

在执行此过程后,您可以将端点设置为AGAIN,因为BPEL会覆盖您第一次发送的内容。这当然是一种解决方法,但现在这个过程很有效。如果你能想出绕过这个工作并动态修复服务的方法,那么当我们将ti移动到Dev等新的环境时,我们就不必一直改变服务WSDL。我很满意。谢谢,我将一如既往地阅读建议评论。 =)

答案 2 :(得分:0)

您可以使用bpel配置计划在不同环境之间切换。

配置计划是用于使复合材料环境特定的推荐选项。

有效使用配置计划可以大大减少每个流程所需的工作量。

可以从composite.xml文件生成配置计划。

请考虑以下链接:

http://biemond.blogspot.com.br/2010/02/web-service-references-and-soa.html